2013-07-26 39 views
0

后,我写了一个代码文件指定给患者:没有这样的文件或目录中删除文件,Ruby on Rails的

file = Dir.entries('C:\Sites\what2\uploadnew').reject {|entry| entry == "." || entry == ".."} 

file.each do |f| 
    a = File.read('C:\Sites\what2\uploadnew' + '/' + f) + f 

    @patients.each do |patient| 
    if [patient.nachnahme, patient.vorname, patient.geburtsdatum].all? {|i| a.include? i } 
     first = Patient.find_by_id(patient.id) 
     second = first.images.create(:url => 'C:\Sites\what2\uploadsave' + '/' + f[0..-5] + '.tif') 
     File.delete 'C:/Sites/what2/uploadnew/' + f 
    end 
    end 
end 

就像你可以在代码的末尾看到我删除的文件:

File.delete 'C:/Sites/what2/uploadnew/' + f 

但不知怎的,这会导致问题。我得到的错误:

Errno::ENOENT in DocumentsController#index 

No such file or directory - C:/Sites/what2/uploadnew/filename.txt 

奇怪的是,该命令的工作原理和ruby真的删除该文件。意味着该文件不能存在!那么为什么要为这个文件提供ruby?

+1

如果'@ patients.each'为每个文件名运行多次,那么您可能会尝试多次删除同一文件名。它会第一次成功,然后由于它已被删除而在随后的时间中失败。因此,在'@ patients.each'的给定循环中,您的if必须不止一次成功,这会导致错误。 – lurker

+0

好吧,我会尝试与存在? (文件名)谢谢 –

+1

我不确定你的逻辑在语义上是什么意思,但简单的解决方案是在你删除它之前检查文件的存在。 'file_name ='C:/ Sites/what2/uploadnew /'+ f'then'File.delete file_name if File.file? file_name'。 'file?'就像'exists?',但只有在它是普通文件(而不是目录)时才会成功。 – lurker

回答

1

我不确定你的逻辑在语义上是什么意思,所以可能有文件删除不应重复的原因,但简单的解决方案是在删除文件之前检查文件是否存在。

file_name = 'C:/Sites/what2/uploadnew/' + f 
File.delete file_name if File.file? file_name 

因为它是一个正常的文件,我建议使用.file?,而不是exists?

相关问题