当我使用 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
该问题与字母大小写或路径分隔符无关。我检查了那个。此外,我看不到有效文件和无效文件的用户权限存在差异......
我真的不知道,为什么会发生这种情况......谁能重现这个???
谢谢
[编辑]
花了一段时间,但我找到了答案。
这是一个 32/64 位问题。对于 ruby 作为 32 位应用程序,“C:\Windows\System32”实际上是“C:\Windows\SysWOW64”。正如 64 位 WinExplorer 显示的那样,python27.dll 位于 System32 中(只有 64 位进程可以看到 - 好吧,令人困惑),而它应该在 SysWOW64 中才能看到。安装 32 位版本的 Python 为我解决了这个问题(因为我无法更改 ruby 脚本,因为它是 rubypython 的一部分)。