Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 删除文件后没有这样的文件或目录,ruby on rails_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

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请将其作为答案发布,以便我可以标记它!