如何将带有 %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 文件一起使用,这当然可能会启动一个不同的应用程序。
我目前正在使用 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 文件一起使用,这当然可能会启动一个不同的应用程序。