Как создать файл в Ruby - PullRequest
       56

Как создать файл в Ruby

158 голосов
/ 27 октября 2011

Я пытаюсь создать новый файл, и кажется, что все работает не так, как я ожидаю.Вот что я попробовал:

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, а также из рубинового файла.Чего мне не хватает?

Ответы [ 8 ]

403 голосов
/ 27 октября 2011

Использование:

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
33 голосов
/ 27 октября 2011

Попробуйте

File.open("out.txt", "w") do |f|     
  f.write(data_you_want_to_write)   
end

без использования

File.new "out.txt"
24 голосов
/ 27 октября 2011

Попробуйте использовать w+ в качестве режима записи вместо w:

File.open("out.txt", "w+") { |file| file.write("boo!") }
20 голосов
/ 11 июля 2012

ОК, теперь я чувствую себя глупо.Первые два определенно не работают, но вторые два работают.Не уверен, как я убедил себя, что я попробовал их.Извините за трату времени каждого.

Если это кому-то еще поможет, это может произойти, когда вы пытаетесь создать новый файл в несуществующей директории.

10 голосов
/ 09 декабря 2014

Каталог не существует. Убедитесь, что он существует, поскольку open не создаст эти каталоги для вас.

Я сам столкнулся с этим некоторое время назад.

8 голосов
/ 09 мая 2017

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 полезно, если вы собираетесь вывести содержимое за один раз, а затем закрыть файл.

См. документацию для получения дополнительной информации.

3 голосов
/ 26 февраля 2019

Если цель состоит в том, чтобы просто создать файл, самый прямой путь, который я вижу:

 FileUtils.touch "foobar.txt"
1 голос
/ 19 ноября 2015

Вы также можете использовать константы вместо строк, чтобы указать нужный режим.Преимущество в том, что если вы сделаете опечатку с постоянным именем, ваша программа вызовет исключение времени выполнения.

Константы: File::RDONLY или File::WRONLY или File::CREATВы также можете комбинировать их, если хотите.

Полное описание режимов открытия файлов на ruby-doc.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...