你可以在Ruby中一行创建/写/附加一个字符串

是否有可能做到这一点?

v='some text' w='my' + Time.new.strftime("%m-%d-%Y").to_s + '.txt' File.write(w,v) # will create file if it doesn't exist and recreates everytime 

无需在实例上执行File.open? 即只是一个将附加或创建和写入的类方法? 理想情况下,ruby1.9.3溶液。

谢谢

编辑1

这是我根据文档尝试的内容。 我没见过rdoc,但看过其他一些例子。 我再次询问是否可以通过File.write以附加模式打开文件? 谢谢

 irb(main):014:0> File.write('some-file.txt','here is some text',"a") TypeError: can't convert String into Integer from (irb):14:in `write' from (irb):14 from /usr/local/rvm/rubies/ruby-1.9.3-p392/bin/irb:13:in `' irb(main):015:0> irb(main):015:0> File.write('some-file.txt','here is some text',O_APPEND) NameError: uninitialized constant O_APPEND from (irb):15 from /usr/local/rvm/rubies/ruby-1.9.3-p392/bin/irb:13:in `' irb(main):016:0> 

Ruby从1.9.3开始就有IO::write 。 您的编辑显示您传递了错误的参数。 第一个arg是文件名,第二个是要写的字符串,第三个是可选的偏移量,第四个是可以包含传递给open的选项的哈希。 由于您要追加,您需要将偏移量作为文件的当前大小传递以使用此方法:

 File.write('some-file.txt', 'here is some text', File.size('some-file.txt'), mode: 'a') 

从讨论线程中提升: 此方法存在附加的并发问题,因为偏移的计算本质上是有效的 。 这段代码首先会发现大小是X,打开文件,寻找X并写入。 如果另一个进程或线程写入File.sizeFile::write内的搜索/写入之间的File.size ,我们将不再附加并将覆盖数据。

如果使用’a’模式打开文件并且不寻找,则保证从使用O_APPEND为fopen(3)定义的POSIX语义写到最后; 所以我推荐这个:

 File.open('some-file.txt', 'a') { |f| f.write('here is some text') } 

为了说清楚,因为一些评论建议我测试这个工作: IO.write("/tmp/testfile", "gagaga\n", mode: 'a')

那个附加到文件而不需要计算偏移量。 Rubydoc有点误导。 这是一个错误: https : //bugs.ruby-lang.org/issues/11638

 File.open('my' + Time.new.strftime("%m-%d-%Y").to_s + '.txt', 'w') { |file| file.write("some text") } 

MRI已经有了这种方法(我确实复制并粘贴了你的代码并且它有效),但是上次我检查时,JRuby和Rubinius没有。 他们现在可能,我不想安装最新版本。

http://rdoc.info/stdlib/core/IO.write