c# - 如何将带有 %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 已替换为空格。可能是什么问题?
解决方案
一种解决方案是不设置工作目录,而是使用文件名的完整路径:
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 文件一起使用,这当然可能会启动不同的应用程序。
推荐阅读
- node.js - 是否可以使用 frontend-maven-plugin 在开发模式下启动 Web 应用程序(vuejs+springboot)?
- python - 如何解决 ValueError 长度不匹配 预期轴有 0 个元素,新值有 7 个元素
- c# - .NET Core 2.2 如何正确防御 XSS
- sql - 有没有办法在 Presto 中执行 FOR LOOP?
- android - android.support.v4.media.MediaBrowserCompat$CallbackHandler 错误的原因
- mysql - SQL 中的对称对与 JOIN
- python - 使用小部件后端时如何删除 matplotlib 图的窗口标题
- java - 如何测试 java.net.http (Java 11) 请求 BodyPublisher?
- spring-boot - Spring boot config log4j2使用Web查找不起作用
- javascript - 在 Pug 中将对象变量从服务器传递到客户端