【问题标题】:Runtime error with Crystal - "Error opening file"Crystal 的运行时错误 - “错误打开文件”
【发布时间】:2017-03-20 05:25:56
【问题描述】:

所以我有以下导致问题的代码:

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

【问题讨论】:

    标签: io crystal-lang


    【解决方案1】:

    File.new 创建File 类的新实例,而不是新文件。由于您没有给它更多参数,它会尝试以读取模式打开给定文件,因此您只是将其移开,因此失败。

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

    因此,只需删除对 File.new 的调用即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-17
      相关资源
      最近更新 更多