【问题标题】:Process.start results in file not found even though the file existsProcess.start 导致文件未找到,即使文件存在
【发布时间】:2016-07-04 00:35:01
【问题描述】:

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

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。
  • 您的文件名无效示例在“6197_koelkast”和目录分隔符之间有一个空格;我怀疑您的目录实际上在其名称的末尾有一个空格。难道就这么简单吗?

标签: c#


【解决方案1】:

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

我想这就是你想要的芽。使用 ProcessStartInfo 对象和文件路径启动进程,其中空格作为字符串单独传递。

Use Process.Start with parameters AND spaces in path

【讨论】:

  • 这点很好,应该把代码改成:Process.Start("\"" + _document.DocumentFullPath + "\"");。
  • Process.Start 可以处理它(例如文本文件对我有用)但与文件类型关联的查看器可能不能。
  • 在链接中使用这种方式。路径和文件名分开工作正常。
  • 问题似乎是 File.Exists("c:\\folder \\with spaces \\file.jpg") 返回 true 即使“真实”路径是 c:\folder\with spaces\file.jpg
猜你喜欢
  • 1970-01-01
  • 2014-02-20
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多