2015-09-30 2 views
0

Я хочу, чтобы сохранить свои файлы в определенном пути .. я использовал как этотКак записать файл в определенном пути в рубине

file_name = gets 
F = open.(Dir.pwd, /data/folder /#{@file_name },w+) 

Я не уверен, являются ли выше линиями правильно или нет ! Где Dir.pwd указывает путь к каталогу, за которым следует мой путь к папке и имя файла.

Он должен получить значение на конкретном пути с указанием конкретного имени файла. Может ли кто-нибудь сказать мне, как это сделать.

+0

Не сдавайтесь меня голос .. Если госзакупках знать d ошибка означает, что это поможет. Не зная или не понимая или не зная ответа, как можно голосовать? оставить ppl, чтобы ответить на их вопросы, чтобы найти ответы –

+2

Просьба выполнить код и посмотреть, работает ли он, если это не так, дать точное сообщение об ошибке или объяснить, почему наблюдаемое поведение неверно – Caridorc

+1

'File.write (" # {Dir. pwd}/# {gets} ", 'Как это работает?')'. Я дам вам понять, как это работает. Вероятно, вы должны посмотреть [Класс файла] (http://ruby-doc.org/core/classes/File.html) и его родительский класс [IO class] (http://www.ruby-doc.org/core- 1.9.3/IO.html). После этого подумайте о домашнем задании и измените его, чтобы служить вашим целям. С уважением – radubogdan

ответ

2

Ваш код имеет несколько ошибок. Вы когда-нибудь пытались выполнить сценарий?

Ваш сценарий заканчивается:

test.rb:7: unknown regexp options - fldr 
test.rb:7: syntax error, unexpected end-of-input 
    F = open.(Dir.pwd, /data/folder /#{@file_name },w+) 

Первое: Вам нужно определить строки с ' или ":

file_name = gets 
F = open.(Dir.pwd, "/data/folder/#{@file_name}","w+") 

Некоторые другие ошибки:

  • Вы используете file_name и позже @file_name.
  • Метод open относится к классу File и нуждается в двух параметрах.
  • Файл определяется как константа F. Я бы использовал переменную.
  • Путь должен быть конкатенирован. Я бы использовал File.join.
  • Вы не закрыли файл.

После всех этих изменений вы получаете:

file_name = gets 
f = File.open(File.join(Dir.pwd, "/data/folder/#{file_name}"),"w+") 
## 
f.close 

и ошибка:

test.rb:29:in `initialize': No such file or directory @ rb_sysopen - C:/Temp/data/folder/sdssd (Errno::ENOENT) 

папка должна существовать, так что вы должны сначала создать его.

Теперь сценарий выглядит следующим образом:

require 'fileutils' 
dirname = "data/folder" 
file_name = gets.strip 
FileUtils.mkdir_p(dirname) unless Dir.exists?(dirname) 
f = File.open(File.join(Dir.pwd, dirname, file_name),"w+") 
##fill the content 
f.close 
+0

Вместо того, чтобы присваивать 'open' переменной, а затем' close', используйте блочную форму 'open'. –