【问题标题】:C# File.Exist(File_Path) Returns false even if File_Path is true, file exists and i have rights to access that fileC# File.Exist(File_Path) 即使 File_Path 为真,文件存在并且我有权访问该文件,也返回 false
【发布时间】:2013-07-25 08:34:33
【问题描述】:

我正在编写一个将在 Windows 7 上运行的软件。我正在列出已安装的服务、获取服务的映像路径位置并检查服务文件是否存在。(Dll 或 Exe)。

我正在使用File.Exist(File_Path) 检查文件位置。对于某些文件,即使文件路径是true,它也会返回false,文件存在并且我有权访问该文件。

我知道即使该文件存在,如果用户无权访问它File.Exist(File_Path) 也会返回 false。

例如,它为文件 C:\Windows\System32\appmgmts.dll 返回 true 但它为文件C:\Windows\System32\audiosrv.dll返回false

当我在 Windows 资源管理器下查看这两个文件的用户权限时,它们完全相同。 但是File.Exist(File_Path) 会为这些文件返回不同的答案。

我正在运行 Visual Studio,并以管理员身份运行 Exe 文件。

对于这种奇怪的行为,请给我一些建议。

【问题讨论】:

  • 我建议您在文件上尝试File.ReadAllBytes,然后发布结果IOException 的消息。这可能比 File.Exists 的简单 False 提供更多信息。
  • 猜测:您的应用程序在 64 位系统上以 32 位模式运行。如果是这样,您的程序在 C:\Windows\System32 中看到的内容就是 Windows Explorer 显示为 C:\Windows\SysWOW64 的内容。您可以通过在 C:\Windows\SysWOW64 中查找(或创建)一个在 C:\Windows\System32 中存在的文件,然后尝试从 C:\Windows 打开它来检查这一点\System32.
  • 试试File.Exists(Path.Combine(Environment.SystemDirectory, "appmgmts.dll")File.Exists(Path.Combine(Environment.SystemDirectory, "audiosrv.dll")
  • @hvd 谢谢,这解决了我的问题

标签: c#


【解决方案1】:

当我在 x86 配置中执行 File.Exists 时,我得到了相同的结果,但是当我在 64 中时,这两个文件返回 true,我在网上发现 File.Exists 在你的案例搜索中在 SysWOW64 中,检查这个问题更多:check if file exist on 64 bits system using File.Exists

【讨论】:

    【解决方案2】:

    我修复了在通过使用域凭据创建的映射检查文件时发生的类似问题。我以管理员身份调试 VS。我能够通过 Windows 资源管理器导航到该文件,但不能使用 VS。

    当我关闭 VS Admin 模式并重新正常启动时,我解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      相关资源
      最近更新 更多