2

我编写了一个代码来将文档分配给患者:

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​​ 索要这个文件呢?

4

1 回答 1

2

我不确定您的逻辑在语义上的总体含义,因此可能存在不应该重复删除文件的原因,但简单的解决方案是在删除文件之前检查文件是否存在。

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

由于它是一个普通文件,我建议使用.file?而不是exists?.

于 2013-07-26T11:03:59.353 回答