Ruby File.new`initialize':没有这样的文件或目录

时间:2013-04-24 19:36:24

标签: ruby file

我完全被这一个难住了。我正在尝试调试一些创建FirstRun文件的代码作为程序已经完成其首次运行设置的标记。它尝试在absworkingdir变量给出的指定工作目录中创建它。但是,当它尝试使用File.new创建文件时,我收到以下错误
`initialize': No such file or directory '

以下是相关代码:

#First run setup
puts workingdir#debug
absworkingdir = File.expand_path(workingdir)
puts absworkingdir#debug
if File.exist?("#{absworkingdir}/FirstRun.lock") == false
    puts "This appears to be the first run of FigShare Sync. We'll setup a few things."
    print "Where would you like to store settings and files? [~./figsharesync]: "
    @input = gets.chomp
    puts @input#debug
        if @input.empty? == false
            workingdir = @input
            absworkingdir = File.expand_path(workingdir)
        end
    print "Please enter OAuth consumer key: "
    consumerkey = gets.chomp
    print "Please enter OAuth consumer key secret: "
    consumersecret = gets.chomp
    print "Please enter OAuth access token: "
    accesstoken = gets.chomp
    print "Please enter OAuth access token secret: "
    accesstokensecret = gets.chomp
    puts "Great! we'll get running now..."
puts absworkingdir#debug
File.new("#{absworkingdir}/FirstRun.lock", "r")
end

以下是调试行的输出:

~/.figsharesync/                                                                                                                                                                                                                        
/var/lib/stickshift/5165dc1e4382ec92040001a8/app-root/data/.figsharesync                                                                                                                                                                
This appears to be the first run of FigShare Sync. We'll setup a few things.                                                                                                                                                            
Where would you like to store settings and files? [~./figsharesync]:                                                                                                                                                                    

Please enter OAuth consumer key:                                                                                                                                                                                                        
Please enter OAuth consumer key secret:                                                                                                                                                                                                 
Please enter OAuth access token:                                                                                                                                                                                                        
Please enter OAuth access token secret:                                                                                                                                                                                                 
Great! we'll get running now...                                                                                                                                                                                                         
/var/lib/stickshift/5165dc1e4382ec92040001a8/app-root/data/.figsharesync                                                                                                                                                                
source/figsharesync2.rb:38:in `initialize': No such file or directory - /var/lib/stickshift/5165dc1e4382ec92040001a8/app-root/data/.figsharesync/FirstRun.lock(Errno::ENOENT)                                                          
    from source/figsharesync2.rb:38:in `new'                                                                                                                                                                                        
    from source/figsharesync2.rb:38:in `<main>'     

4 个答案:

答案 0 :(得分:5)

你想在File.new中使用写模式,否则你说你想在读模式下打开一个不存在的文件:

f = File.new("#{absworkingdir}/FirstRun.lock", "w")
f.close

答案 1 :(得分:0)

你所在的if-block的条件是“如果这个文件不存在”,然后你试图打开不存在的文件进行阅读。这显然无法奏效。你可能想打开而不是阅读。

答案 2 :(得分:0)

您没有名为/var/lib/stickshift/5165dc1e4382ec92040001a8/app-root/data/.figsharesync/FirstRun.lock的文件可供阅读。如果您正在尝试创建要写入的新文件,则需要使用模式"w"(写入),如果该文件不存在,则创建该文件,而不是"r"(读取),这要求文件已经存在。

有关模式的详细信息,请参阅the docs。还http://www.ruby-doc.org/core-1.9.3/File.html

答案 3 :(得分:0)

尝试使用w +作为写入模式,而不仅仅是w:

File.open("out.txt", "w+") { |file| file.write("boo!") }

请参阅:How to create a file in Ruby