File.Exists() returns Program Files 下的某些文件为 false

File.Exists() returns false for some files under Program Files

我认为这是由于某些权限问题,但事实并非如此。该文件对“用户”具有“读取和执行、读取”权限,对“管理员”和“系统”具有“完全控制”权限。 File.Exists() returns 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) 之间的 space。

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

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

就您的陈述而言:

Anyway, there seems to be a weird behaviour of pasting path in Visual Studio. If I use "Copy as path" in File Explorer and paste it into an empty string, VS removes the space between Files and (x86).

这几乎可以肯定是因为自动格式化,这是在粘贴时完成的(尽管你可以禁用它,或者使用 CTRL+Z 来备份,因为它似乎粘贴 then 格式)。

由于您粘贴 "quoted thing" 内部引号以 ""quoted thing"" 结束,quoted thing 位现在 外部 引号因此主题自动格式化。

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