Ответы:
Рубиновый класс файла даст вам все входы и выходы ::new
и , ::open
но его родитель, класс IO , попадет в глубину #read
и #write
.
Вы ищете следующее?
File.open(yourfile, 'w') { |file| file.write("your text") }
yourfile
переменная, которая содержит имя файла для записи.
f.write
исключение.
File.write('filename', 'content')
IO.write('filename', 'content')
Вы можете использовать короткую версию:
File.write('/path/to/file', 'Some glorious content')
Возвращает написанную длину; смотрите :: написать для более подробной информации и опций.
Чтобы добавить файл, если он уже существует, используйте:
File.write('/path/to/file', 'Some glorious content', mode: 'a')
Это предпочтительный подход в большинстве случаев:
File.open(yourfile, 'w') { |file| file.write("your text") }
Когда блок передается File.open
, объект File будет автоматически закрыт после его завершения.
Если вы не передаете блок в File.open
, вы должны убедиться, что файл правильно закрыт и содержимое было записано в файл.
begin
file = File.open("/tmp/some_file", "w")
file.write("your text")
rescue IOError => e
#some error occur, dir not writable etc.
ensure
file.close unless file.nil?
end
Вы можете найти это в документации :
static VALUE rb_io_s_open(int argc, VALUE *argv, VALUE klass)
{
VALUE io = rb_class_new_instance(argc, argv, klass);
if (rb_block_given_p()) {
return rb_ensure(rb_yield, io, io_close, io);
}
return io;
}
File.open
blog.rubybestpractices.com/posts/rklemme/… это также упоминается в официальной документации
Найденный здесь ответ Замбри самый лучший.
File.open("out.txt", '<OPTION>') {|f| f.write("write your stuff here") }
где ваши варианты для <OPTION>
:
r
- Только для чтения. Файл должен существовать.
w
- Создать пустой файл для записи.
a
- Добавить в файл. Файл создается, если он не существует.
r+
- Откройте файл для обновления и чтения и записи. Файл должен существовать.
w+
- Создать пустой файл для чтения и записи.
a+
- Откройте файл для чтения и добавления. Файл создается, если он не существует.
В вашем случае w
это предпочтительнее.
Для тех из нас, кто учится на примере ...
Запишите текст в файл следующим образом:
IO.write('/tmp/msg.txt', 'hi')
БОНУСНАЯ ИНФОРМАЦИЯ ...
Прочитайте это обратно, как это
IO.read('/tmp/msg.txt')
Часто я хочу прочитать файл в буфер обмена ***
Clipboard.copy IO.read('/tmp/msg.txt')
И в других случаях я хочу написать, что в моем буфере обмена в файл ***
IO.write('/tmp/msg.txt', Clipboard.paste)
*** Предполагается, что у вас установлен гем буфера обмена
Смотрите: https://rubygems.org/gems/clipboard
IO.write
опции перезаписывать содержимое файла вместо добавления. Добавить с IO.write немного утомительно.
Errno::ENOENT: No such file or directory @ rb_sysopen
сообщение и файл, созданный с размером 0 байт.
Чтобы уничтожить предыдущее содержимое файла, запишите в него новую строку:
open('myfile.txt', 'w') { |f| f << "some text or data structures..." }
Чтобы добавить файл без перезаписи его старого содержимого:
open('myfile.txt', "a") { |f| f << 'I am appended string' }