当我使用ruby打印出windows 7 system32目录中的所有文件时,有些文件丢失了。我使用这个简单的目录迭代:
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
该问题与字母大小写或路径分隔符无关。我查了一下。另外,我没有看到有效和无效文件的用户权限差异......
我真的不知道为什么会发生这种情况...任何人都可以重现这个吗???
thanks
[edit]
花了一段时间,但我找到了答案。
这是一个 32/64 位问题。对于 Ruby 作为 32 位应用程序,“C:\Windows\System32”实际上是“C:\Windows\SysWOW64”。正如 64 位 WinExplorer 所示,python27.dll 位于 System32 中(只有 64 位进程才能看到 - 嗯,令人困惑),而它应该位于 SysWOW64 中,以便 ruby 看到。安装 32 位版本的 Python 解决了我的问题(因为我无法更改 ruby 脚本,因为它是 rubypython 的一部分)。