Відповіді:
Рубіновий клас файлу дасть вам всі входи і виходи ::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' }