Ruby不会写入文件,但不会打印错误

Ruby不会写入文件,但不会打印错误,ruby,file-io,Ruby,File Io,我正在编写一个小的备忘录脚本,在运行它并测试它之后,它不会输出到文件中,它会让我拔出头发,因为我所做的任何更改都不能解决问题。文件将被创建,但保持为空 require 'ruby-progressbar' puts "Loading..." lt = ProgressBar.create if File.directory?("./memos") == false lt.progress = 50 Dir.mkdir("memos") lt.progress = 100

我正在编写一个小的备忘录脚本,在运行它并测试它之后,它不会输出到文件中,它会让我拔出头发,因为我所做的任何更改都不能解决问题。文件将被创建,但保持为空

require 'ruby-progressbar'
puts "Loading..."
lt = ProgressBar.create
if File.directory?("./memos") == false
    lt.progress = 50
    Dir.mkdir("memos")
    lt.progress = 100
end
lt.progress = 100
Dir.chdir("memos")
puts "Welcome to Eternal Memorizer."
loop do
    progress = ProgressBar.create
    progress.log "Getting files..."
    progress.progress = 50
    cdf = Dir.glob("**/*") 
    progress.progress = 100
    puts "Memos:"
    puts cdf
    puts ""
    puts "[M]ake memo, [R]ead memo, [D]elete memo."
    op = gets.chomp
    if op.downcase == "m"
        print "Memo name: "
        nam = gets.chomp
        puts "\nText, Press enter to finish:"
        txt = gets.chomp
        num = txt.length
        txt = txt.split('')
        ggg = ProgressBar.create(:title => "Saving...", :total => num)
        o = File.open("#{nam}.mem", 'w+')
        i = 0
        ggg.log "Writing #{txt.join}"
        num.times do
            puts txt
            #sleep(30)
            o.write("#{txt[i]}")
            i += 1
            ggg.increment
            ggg.title = "#{txt[i]}"
            #system("cls"); system("clear")
        end
    elsif op.downcase == "r"
        puts "Which memo to open?"
        fil = gets.chomp
        begin
            fil = File.open("#{fil}", 'r+')
            puts "\n-=-=-=-"
            puts fil.read
            puts "-=-=-=-\n"
        rescue
            puts "Err, unable to open file."
        end
    elsif op.downcase == "d"
        puts "Which memo to delete?"
        File.delete(gets.chomp)
    end
end

我已经读了一遍又一遍,现在已经到了我放弃的地步,所以如果发现错误,这将是一个很大的帮助。

或者在完成写入后手动关闭该文件

o.close
这将把它提交到磁盘

或者使用File.open的块形式来处理文件的关闭

File.open("#{nam}.mem", 'w+') do |o|
  i = 0
  ggg.log "Writing #{txt.join}"
  num.times do
      puts txt
      #sleep(30)
      o.write("#{txt[i]}")
      i += 1
      ggg.increment
      ggg.title = "#{txt[i]}"
      #system("cls"); system("clear")
  end
end

这很有效,这很奇怪,因为我的其他编码项目刚刚编写了它,我不需要担心关闭它。@Pixelz:不,你总是需要关闭它。但有时系统会为你关闭它。哈哈。有一次我做了一个严肃的程序,它改变了我的规则。这些变量名需要很多改进。为什么痴迷于写三个字母?名称应该是最小的,但具有描述性。当文件(只有一个字母长)是自解释的时,Like fil是令人困惑的。您还应该学习使用case,比如case op.downcase,然后是简单的“m”。它的代码要少得多,而且比重复地对同一件事情进行降级要高效得多。