Я пытаюсь создать новый файл, и кажется, что все работает не так, как я ожидаю. Вот что я попробовал:
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, так и из сценария Ruby. Чего мне не хватает?
Errno::EACCES
, нетENOENT
.Ответы:
Использование:
где ваши варианты:
r
- Только для чтения. Файл должен существовать.w
- Создать пустой файл для записи.a
- Добавить в файл. Файл создается, если он не существует.r+
- Откройте файл для обновления и чтения и записи. Файл должен существовать.w+
- Создать пустой файл для чтения и записи.a+
- Откройте файл для чтения и добавления. Файл создается, если он не существует.В вашем случае
'w'
это предпочтительнее.ИЛИ вы могли бы иметь:
источник
outFile
должен выглядеть такout_file
.Пытаться
без использования
источник
Попробуйте использовать
"w+"
в качестве режима записи вместо просто"w"
:источник
w
) или одновременно читать и писать (w+
).Если это кому-нибудь еще поможет, это может произойти, когда вы пытаетесь создать новый файл в несуществующем каталоге.
источник
Каталог не существует. Убедитесь, что он существует как
open
не будет создавать эти каталоги для вас.Я сам столкнулся с этим некоторое время назад.
источник
File.new
и поFile.open
умолчанию read mode ('r'
) как механизм безопасности, чтобы избежать возможной перезаписи файла. Мы должны явно указать Ruby использовать режим записи ('w'
это наиболее распространенный способ), если мы собираемся выводить в файл.Если выводимый текст является строкой, а не записью:
или хуже:
Используйте более сжатые
write
:write
имеет режимы позволили таким образом мы можем использовать'w'
,'a'
,'r+'
если это необходимо.open
с блоком полезно, если вам нужно вычислить вывод в итеративном цикле и вы хотите оставить файл открытым, как вы это делаете.write
полезно, если вы собираетесь вывести содержимое за один раз, а затем закрыть файл.Смотрите документацию для получения дополнительной информации.
источник
Если цель состоит в том, чтобы просто создать файл, самый прямой путь, который я вижу:
источник
Ты можешь использовать
File.write('name of file here', data)
источник
Вы также можете использовать константы вместо строк, чтобы указать нужный режим. Преимущество в том, что если вы сделаете опечатку с постоянным именем, ваша программа вызовет исключение времени выполнения.
Константы являются
File::RDONLY
илиFile::WRONLY
или илиFile::CREAT
. Вы также можете объединить их, если хотите.Полное описание режимов открытия файлов на ruby-doc.org
источник