使用File.Exists检查64位系统上是否存在文件

Car*_*Liu 13 c#

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

但下面的代码返回true

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

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

Mic*_*urr 16

由于许多应用程序已将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.


Tim*_*mbo 5

32位进程在请求C:\ Windows\System32目录时会看到C:\ Windows\SysWOW64目录的内容.

此外,在尝试将文件保存到C:\ Windows\System32时,它将以C:\ Windows\SysWOW64结尾.

但是,除非您正在编写安装程序类型的程序,否则您可能根本不想弄乱这些目录.C:\ Windows\System32中的所有二进制文件都是64位,不能从32位进程使用.这就是为什么对它们的请求首先被重定向到C:\ Windows\SysWOW64.

编辑:如果您确实想要查看文件,通过PInvoke 使用Wow64DisableWow64FsRedirection.

  • 就像好的旧微软一样,将64位二进制文​​件放在以"32"结尾的文件夹中,将32位二进制文​​件放在一个以"64"结尾的二进制文件中.是的,我知道WOW64代表"Windows 64上的Windows",但命名选择仍然很糟糕. (5认同)
  • 所以很多程序员硬编码"system32"是微软的错吗? (4认同)