【问题标题】:How can I pass a file path with %20 as an argument to a process?如何将带有 %20 的文件路径作为参数传递给进程?
【发布时间】:2020-11-18 15:53:15
【问题描述】:

我目前正在使用 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)。

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

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

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

【问题讨论】:

  • 空格与它无关。 %20 有问题,它是 %、2 和 0,而不是空格。
  • @ThomasWeller 是的,这就是问题所在(不是空格我不好)。 PowerPoint 无法打开文件的原因可能是什么?
  • 原因可能是filePath 包含空格而不是%20。问题可能在显示的代码之前
  • @Adassko:它适用于空格。它不适用于 %20
  • @ThomasWeller 看起来文件名为“Statistics%20Made”,但他试图打开“Statistics Made”

标签: c# command-line-arguments process.start


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2018-12-26
    • 2011-04-20
    相关资源
    最近更新 更多