在Ruby中创建一个空文件:";触摸“;相等的

在Ruby中创建一个空文件:";触摸“;相等的,ruby,file,Ruby,File,在Ruby中创建空文件的最佳方法是什么 类似于Unix命令的内容: 看起来像它所做的,并镜像*touch命令: require 'fileutils' FileUtils.touch('file.txt') *与此不同,您不能单独更新mtime或atime。它还缺少其他一些不错的选择。举个例子: File.open "foo.txt", "w" 如果您担心文件句柄: File.open("foo.txt", "w") {} 从: 如果给出了可选代码块,则会将其传递给打开的文件 作为参数,文

在Ruby中创建空文件的最佳方法是什么

类似于Unix命令的内容:

看起来像它所做的,并镜像*
touch
命令:

require 'fileutils'
FileUtils.touch('file.txt')
*与此不同,您不能单独更新mtime或atime。它还缺少其他一些不错的选择。

举个例子:

File.open "foo.txt", "w"

如果您担心文件句柄:

File.open("foo.txt", "w") {}
从:

如果给出了可选代码块,则会将其传递给打开的文件 作为参数,文件对象将在 块终止


在Ruby 1.9.3+中,您可以使用
File.write
(也称为):


对于早期版本,或者使用
File.open(“foo.txt”,“w”){}

,也不太有利,但非常简短:

`touch file.txt`

你总是可以做
`touch file.txt`
@Mark:即使在windows上?这会像在其他语言中一样留下一个打开的文件句柄吗?@Abhi:是的,但垃圾收集会在某个时候处理它。不过,为了避免这种情况,请通过一个空模块(参见迈克尔·科尔的回答)“在某个时刻”什么时候会发生?在脚本结束时,还是因为没有分配给任何变量而立即执行?我正在创建文件,以便系统上的其他进程可以立即开始使用它,如果文件句柄仍然打开以进行写入,它们将被阻止。file.open(“foo.txt”,“w”).close()解决了文件句柄问题,但FileUtils.touch是一个更好的解决方案。不要像这样保留打开的文件句柄:-)谢谢,我正在将新文件发送到另一个进程,因此需要立即关闭句柄。值得指出的是,这实际上不会镜像
touch
-如果文件存在,它将覆盖该文件。使用附加模式,如果文件已经存在,则不会截断该文件。打开(“foo.txt”,“a”){}这也不会镜像“touch”,但是“触摸(1)”不是问题。使用“a”不会更新mtime。(“touch”是副标题,所以谷歌给我们带来了想要Ruby touch的人。)在*nix systems上,以这种方式创建文件时,谁是文件所有者?这要干净得多,但不幸的是,我需要向后兼容。不过,我会记住它,以备将来使用。它会产生不同的价格,所以速度非常慢。评论中已经提到了这一点,我之前没有注意到。
File.write("foo.txt", "")
`touch file.txt`