所以我得到以下代码导致问题:
if File.file?(indexPath)
puts "Have to move index"
File.rename(indexPath, "#{indexPath}.old")
end
File.new(indexPath)
File.write(indexPath, "test" )#handler.getDoc)
sleep 60.second
我认为这会检查文件是否存在,并在编写新的index.html之前备份它。相反,我得到以下运行时错误:
Error opening file './assets/index.html' with mode 'r': No such file or directory (Errno)
0x10098ab45: *CallStack::unwind:Array(Pointer(Void)) at ??
0x10098aae1: *CallStack#initialize:Array(Pointer(Void)) at ??
0x10098aab8: *CallStack::new:CallStack at ??
0x10097c001: *raise<Errno>:NoReturn at ??
0x1009c9dd9: *File#initialize<String, String, Int32, Nil, Nil>:(Event::Event | Nil) at ??
0x1009cbba9: *File#initialize<String>:(Event::Event | Nil) at ??
0x1009cbb51: *File::new<String>:File at ??
0x10097148b: __crystal_main at ??
0x100981758: main at ??
答案 0 :(得分:1)
File.new
创建File
类的新实例,而不是新文件。由于你没有给它进一步的参数,它试图在读取模式下打开给定的文件,你只是将它移开,以便失败。
要创建一个空文件,可以使用File.touch
,但是在写模式下打开文件,File.write
在内部执行,会在文件不存在时创建该文件。
所以只需删除对File.new
的调用即可。