【发布时间】:2012-08-25 13:11:38
【问题描述】:
当我使用 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 的一部分)。
【问题讨论】:
-
我不认为这是问题所在,但我更喜欢使用
/而不是 \ 或蒙面的 \\,即使在我使用 Windows 时也是如此。/工作正常,使用 \ 我遇到了问题。还有File::SEPARATOR,你可以用File.join构建路径。
标签: ruby windows system32 rubypython