Как создать файл в Ruby
Я пытаюсь создать новый файл, и все, кажется, не работает, как я их ожидаю. Вот что я пробовал:
File.new "out.txt"
File.open "out.txt"
File.new "out.txt","w"
File.open "out.txt","w"
В соответствии со всем, что я читал в Интернете, все из них должны работать, но каждый из них дает мне это:
ERRNO::ENOENT: No such file or directory - out.txt
Это происходит от IRB, а также от рубинового файла. Что мне не хватает?
Ответы
Ответ 1
Использование:
File.open("out.txt", [your-option-string]) {|f| f.write("write your stuff here") }
где ваши варианты:
-
r
- Только чтение. Файл должен существовать.
-
w
- Создайте пустой файл для записи.
-
a
- Добавить в файл. Файл создается, если он не существует.
-
r+
- открыть файл для обновления и чтения и записи. Файл должен существовать.
-
w+
- Создайте пустой файл для чтения и записи.
-
a+
- открыть файл для чтения и добавления. Файл создается, если он не существует.
В вашем случае предпочтительнее 'w'
.
ИЛИ вы могли бы:
out_file = File.new("out.txt", "w")
#...
out_file.puts("write your stuff here")
#...
out_file.close
Ответ 2
Попробуйте
File.open("out.txt", "w") do |f|
f.write(data_you_want_to_write)
end
без использования
File.new "out.txt"
Ответ 3
Попробуйте использовать w+
как режим записи, а не только w
:
File.open("out.txt", "w+") { |file| file.write("boo!") }
Ответ 4
Хорошо, теперь я чувствую себя глупо. Первые два, безусловно, не работают, но второй второй. Не знаю, как я убедил себя, что я их пробовал. Извините, что тратил время на все.
Если это помогает кому-то еще, это может произойти, когда вы пытаетесь создать новый файл в директории, которая не существует.
Ответ 5
Каталог не существует. Убедитесь, что он существует, поскольку open
не создаст эти dirs для вас.
Я наткнулся на это некоторое время назад.
Ответ 6
File.new
и File.open
по умолчанию для режима чтения ('r'
) в качестве механизма безопасности, чтобы избежать возможной перезаписи файла. Мы должны явно указать Ruby на использование режима записи ('w'
является наиболее распространенным способом), если мы собираемся вывести файл.
Если текст, который будет выводиться, представляет собой строку, а не запись:
File.open('foo.txt', 'w') { |fo| fo.puts "bar" }
или хуже:
fo = File.open('foo.txt', 'w')
fo.puts "bar"
fo.close
Используйте более сжатый write
:
File.write('foo.txt', 'bar')
write
имеет разрешенные режимы, поэтому при необходимости мы можем использовать 'w'
, 'a'
, 'r+'
.
open
с блоком полезна, если вам нужно вычислить вывод в итеративном цикле и хотите оставить файл открытым, когда вы это сделаете. write
полезно, если вы собираетесь выводить содержимое в один взрыв, затем закройте файл.
Подробнее см. документацию.
Ответ 7
Вы также можете использовать константы вместо строк, чтобы указать нужный вам режим. Преимущество заключается в том, что если вы создадите опечатку в постоянном имени, ваша программа увеличит исключение во время выполнения.
Константы File::RDONLY
или File::WRONLY
или File::CREAT
. Вы также можете комбинировать их, если хотите.
Полное описание режимов открытия файла на ruby-doc.org