Crystal运行时错误 - "打开文件错误"

时间:2017-03-20 05:25:57

标签: io crystal-lang

所以我得到以下代码导致问题:

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 ??

1 个答案:

答案 0 :(得分:1)

File.new创建File类的新实例,而不是新文件。由于你没有给它进一步的参数,它试图在读取模式下打开给定的文件,你只是将它移开,以便失败。

要创建一个空文件,可以使用File.touch,但是在写模式下打开文件,File.write在内部执行,会在文件不存在时创建该文件。

所以只需删除对File.new的调用即可。