Crystal - "Error opening file" 的运行时错误
Runtime error with Crystal - "Error opening file"
所以我得到了以下导致问题的代码:
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 ??
File.new
创建 File
class 的新实例,而不是新文件。因为你没有给它更多的参数,它会尝试以读取模式打开给定的文件,你只是把它移开了,所以失败了。
要创建一个空文件,可以使用 File.touch
,但是在 File.write
内部以写入模式打开文件时,会在文件不存在时创建该文件。
因此,只需删除对 File.new
的调用即可。
所以我得到了以下导致问题的代码:
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 ??
File.new
创建 File
class 的新实例,而不是新文件。因为你没有给它更多的参数,它会尝试以读取模式打开给定的文件,你只是把它移开了,所以失败了。
要创建一个空文件,可以使用 File.touch
,但是在 File.write
内部以写入模式打开文件时,会在文件不存在时创建该文件。
因此,只需删除对 File.new
的调用即可。