2015-06-29 6 views
0

У меня есть программа командной строки, которая задает пользователю набор вопросов и сохраняет их в файле. Единственная проблема заключается в том, что мне нужно создать новый файл, и он не будет.ruby: Невозможно создать новый файл

Вот что я пробовал: File.open("path/to/file", "w")
и File.open("path/to/file", "w+")

Оба раза я получаю эту ошибку
in 'initialize': No such file or directory @ rb_sysopen - path/to/file (Errno::ENOENT)

Вот мой текущий код:
File.open("path/to/file", "w") { |f| f.write(array.join("\n")) }

+0

Существует ли каталог 'path/to'? Обычно безопаснее указывать полный путь, чтобы избежать двусмысленности. Вы можете использовать ['File.expand_path'] (http://ruby-doc.org/core-2.0.0/File.html#method-c-expand_path), чтобы решить эту проблему. – tadman

ответ

0

Убедитесь, что вы используете абсолютный путь, и если да, убедитесь, что каталог, в который вы хотите сохранить файл, отсутствует. Попробуйте создать его первый:

require 'fileutils' 
FileUtils.mkdir_p '/path/to' 
File.open('/path/to/file', 'w') { ... } 
3

Когда кто-то пишет path/to/file в блоге или документации, они не собираются для вас буквально написать path/to/file в вашем коде. Дело в том, что вам нужно отредактировать эту строку, чтобы на самом деле иметь реальный путь к вашему файлу, либо как относительный путь, либо абсолютный путь.

Вы сказали, что вы получаете эту ошибку из интерпретатора Ruby:

No such file or directory @ rb_sysopen - path/to/file (Errno::ENOENT)

Это означает, что в текущем рабочем каталоге, нет каталога с именем «путем», или, если есть каталог с именем «путем ", то у него нет дочернего каталога с именем" to ".

Вы можете решить ближайшую проблему, выполнив mkdir -p path/to, но это было бы странно. Лучше просто написать подходящий путь в вашем коде, указав на каталог, который уже существует. Попробуйте изменить путь, чтобы просто быть output.txt (без косых черт) и посмотреть, как это работает.

+0

Я попытался избавиться от косых черт и напечатать на output.txt, и это дало мне новую ошибку: Invalid Argument @ rb_sysopen - output.txt (Errno :: EINVAL) – AndrewSumsion

+2

Ну, это странно. Может быть, вы дали строку плохого режима? Как насчет того, чтобы опубликовать весь свой код и включить сеанс оболочки, который показывает, какой именно каталог вы используете при запуске, как вы его запускаете и полный вывод? И, пожалуйста, сообщите нам, в какой среде вы используете Ruby. Эта информация должна быть добавлена ​​к вашему вопросу. –

Смежные вопросы