3

私はこれに完全に困惑しています。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

4 に答える 4

6

File.new で書き込みモードを使用したい場合は、存在しないファイルを読み取りモードで開きたいと言っています。

f = File.new("#{absworkingdir}/FirstRun.lock", "w")
f.close
于 2013-04-24T19:42:37.680 に答える
0

条件が「このファイルが存在しない場合」である if ブロックにいる場合、存在しないファイルを読み取り用に開こうとします。それは明らかにうまくいきません。おそらく、読み取り用ではなく書き込み用に開きたいと思うでしょう。

于 2013-04-24T19:42:12.333 に答える
0

/var/lib/stickshift/5165dc1e4382ec92040001a8/app-root/data/.figsharesync/FirstRun.lock読み取り用に開く名前のファイルがありません。書き込み先の新しいファイルを作成しようとしている場合は、ファイルが既に存在している必要がある (読み取り)モード"w"ではなく、ファイルが存在しない場合にファイルを作成するモード (書き込み)を使用する必要があります。"r"

モードの詳細については、ドキュメントを参照してください。http://www.ruby-doc.org/core-1.9.3/File.htmlも。

于 2013-04-24T19:42:22.270 に答える
0

w だけではなく、書き込みモードとして w+ を使用してみてください。

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

参照: Ruby でファイルを作成する方法

于 2014-03-12T10:49:47.840 に答える