当我知道文件存在时,在Dir.foreach块中获取Errno :: ENOENT?

时间:2013-11-15 00:46:47

标签: ruby file foreach directory

我目前的路径设置为:

$: << "C:/Users/fireforkingjesus/ruby/note/"

我在这个文件夹中有这些东西:ruby/note/notes/

!IMPORTANT - folder
just.txt
inventory.txt
weapons.txt

如果我把这段代码放得很好:

Dir.foreach("notes/"){|file| puts file}

输出:

.  
..  
!IMPORTANT   
just.txt  
inventory.txt   
weapons.txt

但是这些代码不起作用:

Dir.foreach("notes/"){|file| puts file if File.exist?(file)}

以上^^ put

.    
..

Dir.foreach("notes/"){|file| puts File.exist?(file)}

返回true 2次,false 4次

Dir.foreach("notes/"){ |file|  puts File.ftype(file)}

以上^^返回:“没有这样的文件或目录 - !重要”(Errno :: ENOENT)

我甚至做过这个:

f = "inventory.txt"    
puts "yes before foreach" if File.exist?("notes/inventory.txt")     
Dir.foreach("notes/"){ |file|     
  puts "yes in foreach" if File.exist?("inventory.txt")     
  puts File.ftype(f)     
}

我明白了:

yes before foreach    
No such file or directory -inventory.txt (Errno::ENOENT)`

我有Ruby 2.0,Windows 8.我想可能是权限?或者别的东西 而且我也在我爸爸的胜利视野中试过它

1 个答案:

答案 0 :(得分:1)

仔细看看你的输出:

Dir.foreach("notes/"){|file| puts file}
# ----------^^^^^^^^

产生

.
..
!IMPORTANT
just.txt
inventory.txt
weapons.txt

Dir.foreach正在将基本名称交给块,因此如果Dir没有查看当前目录,则必须重新开启路径:

Dir.foreach("notes/") { |file| puts File.ftype("#{notes}/file") }

当然,...一切正常,每个目录都存在。