如何将带有 %20 的文件路径作为参数传递给进程?

How can I pass a file path with %20 as an argument to a process?

我目前正在使用 C# 开发一个应用程序,该应用程序将启动具有给定参数(应用程序路径和我们尝试打开的文档)的应用程序。

这是我目前试过的代码:

var pi = new ProcessStartInfo(filePath)
{
        Arguments = "\"" + Path.GetFileName(filePath) + "\"",
        UseShellExecute = false,
        WorkingDirectory = Path.GetDirectoryName(filePath),
        FileName = appPath,
        Verb = "OPEN"
};
Process.Start(pi);

其中 filePath 是我们要打开的文件的路径,appPath 是我们要在 (C:\Program Files\...\POWERPNT.exe) 中打开文件的应用程序的路径。

此解决方案适用于包含和不包含 spaces 的文件,但不适用于包含“%20”的文件,此类文件拒绝在 PowerPoint 等应用程序中打开。示例如下:

"PowerPoint can't open this type of file (C:\...\...\Statistics Made Easy.ppt)."

在 Windows 资源管理器中,文件的名称是 Statistics%20Made%20Easy.ppt。请注意,%20 在错误消息中被替换为 space。可能是什么问题?

一个解决方案是不设置工作目录,而是使用文件名的完整路径:

var pi = new ProcessStartInfo(filePath)
{
        Arguments = "/ou \"" + filePath + "\"",                 // full path here
        UseShellExecute = false,
        // WorkingDirectory = Path.GetDirectoryName(filePath),  // skip this
        FileName = appPath,
        Verb = "OPEN"
};

如果Powerpoint是打开PPT文件的默认应用,您也可以使用

Process.Start(filePath);

根本没有指定 pi。 如果用户将应用程序更改为与 PPT 文件一起使用,这当然可能会启动一个不同的应用程序。