Ruby on rails File.open在运行时获取参数时有效,但在从命令行获取参数时无效

Ruby on rails File.open在运行时获取参数时有效,但在从命令行获取参数时无效,ruby-on-rails,ruby,file,io,argv,Ruby On Rails,Ruby,File,Io,Argv,如果我输入一个文件名而不在命令行中传递它(例如ARGV将为空),一切正常,但是如果我在命令行中传递一个参数,我总是得到一个文件或目录不存在异常 例如,file.rb test.txt将删除所有内容 start_dir = "file-io-samples/junk/" begin if ARGV.empty? print "Enter a file name: " file_name = start_dir + gets.chomp else file_name

如果我输入一个文件名而不在命令行中传递它(例如ARGV将为空),一切正常,但是如果我在命令行中传递一个参数,我总是得到一个文件或目录不存在异常

例如,file.rb test.txt将删除所有内容

start_dir = "file-io-samples/junk/"

begin
  if ARGV.empty?
    print "Enter a file name: "
    file_name = start_dir + gets.chomp
  else
    file_name = start_dir + ARGV[0].chomp
    puts "Writing to #{file_name}..."
  end
  fail "File Exists" if File.exist? file_name
  puts "File ready: " if file = File.open(file_name, 'w')
  while line = gets
    break if line.chomp == "!"
    file.puts line
    puts "Written"
  end
rescue Exception
  puts "Exception Raised: #{$!}"
ensure
  puts file.close
end

我可能误解了您的问题,但是如果您正在传递一个绝对路径,并且它可以工作,但是代码中的相对路径不能,那么您可能需要将Rails.root添加到文件路径

可以将路径的各个部分连接在一起,如下所示:

file_name = Rails.root.join(start_dir, ARGV[0].chomp)

您在命令行上实际传递的是什么,在提示时实际输入的是什么,您可以发布错误消息吗?Ruby file.rb text.txt错误是:引发异常(被我的救援捕获)文件或目录不存在。当它以“w”开头时不应该发生