Ruby on rails 删除文件后没有这样的文件或目录,ruby on rails
我编写了一个代码来为患者分配文档:Ruby on rails 删除文件后没有这样的文件或目录,ruby on rails,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我编写了一个代码来为患者分配文档: 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, pati
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请求这个文件呢?我不确定您的逻辑在语义上的总体含义,因此可能有一些原因不应该重复文件删除,但简单的解决方案是在删除之前检查文件是否存在
file_name = 'C:/Sites/what2/uploadnew/' + f
File.delete file_name if File.file? file_name
由于它是一个普通文件,我建议使用
.file?
而不是存在?
如果@患者。每个
对每个文件名运行多次,您可能会多次尝试删除相同的文件名。它将在第一次成功,然后在随后的几次失败,因为它已被删除。因此,在给定的@患者循环中。每个您的if
必须多次成功,这将导致错误。好的,我将尝试使用exists?(文件名)谢谢我不确定你的逻辑在语义上是什么意思,但简单的解决办法是在删除文件之前检查文件是否存在file\u name='C:/Sites/what2/uploadnew/'+f
然后file.delete file\u name如果file.file?文件名
<代码>文件?
类似于存在?
但只有当它是常规文件(而不是目录)时才会成功。@mbrach请将其作为答案发布,以便我可以标记它!