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?
如果'@ patients.each'为每个文件名运行多次,那么您可能会尝试多次删除同一文件名。它会第一次成功,然后由于它已被删除而在随后的时间中失败。因此,在'@ patients.each'的给定循环中,您的if必须不止一次成功,这会导致错误。 – lurker
好吧,我会尝试与存在? (文件名)谢谢 –
我不确定你的逻辑在语义上是什么意思,但简单的解决方案是在你删除它之前检查文件的存在。 'file_name ='C:/ Sites/what2/uploadnew /'+ f'then'File.delete file_name if File.file? file_name'。 'file?'就像'exists?',但只有在它是普通文件(而不是目录)时才会成功。 – lurker