我的操作系统是 64 位,在文件夹 C:\Windows\SysWOW64 中有一个文件 111.txt,但在 c:\windows\system32 中没有该文件

但以下代码返回true

file = @"C:\Windows\System32\111.txt";
bool bExist = System.IO.File.Exists(file);

我不知道为什么?以及如何检查system32下是否有文件111.txt而不是SysWoW64?

最佳答案

由于如此多的应用程序将 System32 目录名称硬编码到路径中,因此 MS 将 64 位系统文件放在那里,而不是放在“System64”目录中。 32 位版本现在进入“SysWOW64”目录(这很令人困惑)。但是为了防止破坏 32 位程序,默认情况下,系统会对尝试访问“System32”目录的 32 位进程执行重定向。在大多数情况下,每当 32 位应用程序尝试访问 %windir%\System32 时,访问都会重定向到 %windir%\SysWOW64。

绕过这种重定向的一个简单方法是使用 %windir%\Sysnative 而不是 %windir%\System32。 Win64 会将该目录“重定向”到实际的 System32 目录。

您可以使用 Wow64DisableWow64FsRedirection() API 来完全禁用此重定向。详见 http://msdn.microsoft.com/en-us/library/aa384187.aspx

关于c# - 使用 File.Exists 检查 64 位系统上是否存在文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2160699/

10-17 01:44