2017-03-20 12 views
0

は、だから私は問題を引き起こし、次のコードを持っている:クリスタルとランタイムエラー - 「エラー開くファイル」

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

File.newFileクラスの新しいインスタンスではなく、新しいファイルを作成します。それ以上の引数を与えないので、指定されたファイルを読み取りモードで開こうとすると、ファイルを移動して失敗します。

空のファイルを作成するにはFile.touchを使用しますが、書き込みモードでファイルを開くと、内部ではFile.writeというファイルが存在しないときにファイルが作成されます。

File.newへの呼び出しを削除するだけで正常に動作します。

関連する問題