首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用File.Exists检查64位系统上是否存在文件

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

Stack Overflow用户
提问于 2010-01-29 16:23:29
回答 2查看 8.1K关注 0票数 13

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

但是下面的代码返回true

代码语言:javascript
复制
file = @"C:\Windows\System32\111.txt";    
bool bExist = System.IO.File.Exists(file);

我也不知道原因?如何检查system32下是否有111.txt文件,而不是SysWoW64下?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-29 16:38:27

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

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

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

票数 16
EN

Stack Overflow用户

发布于 2010-01-29 16:29:32

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

此外,当尝试将文件保存到C:\Windows\System32时,它将以C:\Windows\SysWOW64结束。

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

编辑:如果你真的想看这些文件,可以通过PInvoke使用Wow64DisableWow64FsRedirection

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2160699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档