首页 > 解决方案 > File.Exists() 对 Program Files 下的某些文件返回 false

问题描述

我认为这是由于某些权限问题,但似乎并非如此。该文件对“用户”具有“读取和执行、读取”权限,对“管理员”和“系统”具有“完全控制”权限。File.Exists()退货还有其他原因false吗?

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述


PS:我认为代码不重要,所以我没有输入代码,但如果这是规则,这里是代码的文本版本。

    static void Main(string[] args)
    {
        var app = @"C:\Program Files(x86)\VideoLAN\VLC\vlc.exe";
        var psi = new ProcessStartInfo();
        psi.FileName = Path.GetFileName(app);
        psi.WorkingDirectory = Path.GetDirectoryName(app);
        Process.Start(psi);
    }

无论如何,在 Visual Studio 中粘贴路径似乎有一种奇怪的行为。如果我在文件资源管理器中使用“复制为路径”并将其粘贴到一个空字符串中,VS 会删除 和 之间的Files空格(x86)

在此处输入图像描述

标签: c#system.io.file

解决方案


在您的文件系统上,和之间有一个空格。您用于获取文件的字符串中没有它,因此应将其更改为:Files(x86)

var app = @"C:\Program Files (x86)\VideoLAN\VLC\vlc.exe";
//                          ^
//                      need this

就您的陈述而言:

无论如何,在 Visual Studio 中粘贴路径似乎有一种奇怪的行为。如果我在文件资源管理器中使用“复制为路径”并将其粘贴到一个空字符串中,VS 会删除 和 之间的Files空格(x86)

这几乎可以肯定归结为自动格式化,它是在粘贴时完成的(尽管您可以禁用它,或用于CTRL+Z备份,因为它似乎是先粘贴然后格式化)。

由于您粘贴了一个"quoted thing"内引号以结束""quoted thing"",因此该quoted thing位现在位于引号外,因此会受到自动格式化。

如果您复制了不带引号的文件名,或者复制了带引号的文件名但粘贴到了未引用的区域,我怀疑它会未经修改(作为带引号的字符串)被放入。


推荐阅读