首页 > 解决方案 > 如何将带有 %20 的文件路径作为参数传递给进程?

问题描述

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

这是我到目前为止尝试过的代码:

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

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

此解决方案适用于带有和不带空格的文件,但不适用于带有“%20”的文件,这些文件拒绝在 PowerPoint 等应用程序中打开。下面的例子:

“PowerPoint 无法打开此类文件 (C:\...\...\Statistics Made Easy.ppt)。”

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

标签: c#command-line-argumentsprocess.start

解决方案


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

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 文件一起使用,这当然可能会启动不同的应用程序。


推荐阅读