我完全被这一个难住了。我正在尝试调试一些创建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>'
答案 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!") }