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”。它的代码要少得多,而且比重复地对同一件事情进行降级要高效得多。