當我使用ruby打印出windows 7 system32目錄中的所有文件時,有些文件丟失。我用這個簡單的目錄迭代:System32中的Ruby Dir.foreach錯過文件/ File.exists?對現有文件返回false
Dir.foreach("C:\\Windows\\System32") do |fname|
puts fname
end
我專門找python27.dll,而不會打印,但它的存在。文件已存在?似乎與dir迭代有相同的問題。它爲現有的文件返回false:
File.exists? "C:\\Windows\\System32\\python27.dll" #returns false
檢查該文件夾的另一個現有文件的工作原理:
File.exists? "C:\\Windows\\System32\\quartz.dll" #returns true
但是,如果我複製一個現有的文件或不工作建立在SYSTEM32一個新的
File.exists? "C:\\Windows\\System32\\quartz2.dll" #returns false
而且,在複印python27.dll到另一個目錄,並檢查是否存在工作:
File.exists? "C:\\Otherfolder\\python27.dll" #returns true
該問題與字母大小寫或路徑分隔符無關。我檢查了。此外,我沒有看到用戶權限的文件的工作,不...
我真的不知道,爲什麼發生這種情況......任何人都可以重現這???
感謝
[編輯]
了一段時間,但我找到了答案。
這是一個32/64位的問題。對於ruby作爲32位應用程序,「C:\ Windows \ System32」實際上是「C:\ Windows \ SysWOW64」。正如64位WinExplorer所顯示的,python27.dll在System32中(只有64位進程看到了 - 很好,令人困惑),它應該在SysWOW64中,以便ruby能夠看到。安裝32位版本的Python解決了我的問題(因爲我無法更改ruby腳本,因爲它是rubypython的一部分)。
我不認爲這是問題,但我更喜歡使用' /'而不是\或屏蔽\ \,即使我使用Windows。 '/'可以正常工作,並且\我遇到了問題。還有'File :: SEPARATOR',你可以用'File.join'建立路徑。 – knut