【问题标题】:Ruby File.open not creating fileRuby File.open 不创建文件
【发布时间】:2017-06-04 03:54:30
【问题描述】:

我正在尝试使用

创建和写入新文件
@logFile = File.open("C:\Users\---\Desktop\mylog.log", "w+")

什么也没有发生。我的程序使用

  @logFile.write ("Hello")
  @logFile.flush

而且这条线似乎运行正常(没有崩溃或任何东西) 但我看不到任何新创建的文件。

我在这里错过了什么?

【问题讨论】:

标签: ruby file io writetofile


【解决方案1】:

您应该始终使用path = File.join("C:","Program Files","Blah") 确保它适用于任何架构。

【讨论】:

  • 这将在 *nix 上失败,它不知道“C:”。
  • 我想我的帖子的重点是您应该始终使用File.join() 来生成嵌套路径而不是字符串。
【解决方案2】:
  1. 您的反斜杠被转义,在一个用双引号括起来的字符串中,您需要将它们加倍,或者只使用 Unix 表示法。 所以"C:\\Users\\---\\Desktop\\mylog.log"

"C:/Users/---/Desktop/mylog.log"

'C:\Users\---\Desktop\mylog.log'

  1. Ruby 中的路径在 Unix 表示法中是最安全的,因此即使您使用反斜杠以方便复制,也最好将它们转换为 Unix 格式。

喜欢这个'C:\Users\---\Desktop\mylog.log'.gsub('\\','/')

这里也需要双反斜杠,'和\需要用单引号转义。

另一个与问题无关但非常方便的提示:使用块方法打开文件,以便在关闭文件时清楚,请参阅此示例

File.open(path, 'w') do |file|
  file.puts "Hello"
end

文件结束后关闭。

不过,对于日志记录,请查看 logger,一旦使用它就不会停止使用它。

【讨论】:

  • 顺便说一句:我相信,当你运行你的脚本,由您的代码的原始错误版本创建。不过,我已经很久没有做过任何 Windows 编程了,所以我可能是错的。
  • 是的,因此没有错误,在这种情况下,使用everything.exe 进行搜索会显示 mylog.log 所在的位置,并且使错误显而易见
  • “Ruby 中的所有路径都需要使用 Unix 表示法”。不,他们没有。在 Windows 上,Windows 样式的路径很好。根据字符串的定义方式,可能需要转义分隔符。这在IO documentation 的开口中有所介绍。 *nix 风格的分隔符更方便,并且允许 Ruby 透明地在 Windows 和 *nix 系统之间进行转换,但它们不是必需的。
  • 是的,但是作为一个 windows ruby​​ 开发人员,我过去在使用 windows 样式路径时遇到了很多问题,因此养成了使用 unix 样式路径的习惯,对 windows 的支持在过去几年中明显上升,我会调整我的答案
  • 你应该使用path = File.join("C:","Program Files","Blah")来创建路径
猜你喜欢
  • 1970-01-01
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多