c# - 即使文件存在,Process.start 也会导致找不到文件

标签 c#

我正在使用以下代码打开带有系统上安装的任意应用程序的任意文件:

if (File.Exists(_document.DocumentFullPath))
{
    Process.Start(_document.DocumentFullPath);
}
else MessageBox.Show(string.Format("Document {0} does not exist!", _document.DocumentFullPath));

当我执行此代码时,我看到 file.Exists 返回 true,因此文件确实存在。但是随后会打开相应的应用程序,例如图像查看器或 pdf 查看器,具体取决于我尝试打开的文件类型(jpg 或 pdf),但它在该应用程序中显示找不到文件的错误。没有异常被抛出。 这不会一直发生,而只会发生在某些文件上。 如果我尝试通过在资源管理器中复制粘贴 DocumentFullPath 的内容来手动打开这些文件,那么文件会在适用的应用程序中正确打开。

呃,我不明白哪里出了问题。 无效的文件名示例:

C:\Users\stuyckp\Documents\Visual Studio 2010\Projects\WPF\FrakoKlantOpvolgingWPF\FrakoKlantOpvolgingWPF\bin\Debug\ProjectDocumenten\11339_Wigbers\6197_koelkast \big-money.jpg

我在 Windows 10 上运行。

最佳答案

文件路径中是否有空格? File.Exists 可以很好地处理空格,大概就像 Windows 资源管理器一样,但 Process.Start 可能不能。

我想这就是你想要的宝贝。使用 ProcessStartInfo 对象开始使用进程,文件路径中的空格分别作为字符串传递。

Use Process.Start with parameters AND spaces in path

关于c# - 即使文件存在,Process.start 也会导致找不到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36064332/

相关文章:

C#如何检查if语句的哪一部分是正确的

c# - ASP.NET MVC - 无法在对象中插入重复的键行

c# - 使用 foreach 遍历通用列表

c# - 如何使用 javascript 添加 @html 标签?

c# - 列出目录中的文件夹,其 id 不是 Google Drive API v3 和 C# 中的特定值

c# - 使用 SetOrdinal 向 DataTable 添加列

c# - 为什么 *p++ = *p - a 会给出奇怪的结果?

c# - 如何模拟 Asp.net 身份 UserManager 的 CreateAsync 方法

c# - 获取列表框中所选项目的文本

c# - 基于较长的流创建固定长度的流