【问题标题】:File not found on File.Exists with spaces in path在 File.Exists 上找不到文件,路径中有空格
【发布时间】:2013-11-19 13:56:01
【问题描述】:

如果我的可执行文件从没有空格的路径运行,则此

if(!File.Exists(@"\program.exe"))
    MessageBox.Show("File not found");

不开火。但是,如果程序从带有空格的路径执行,例如C:\Program Files\etc\,我会得到一个找不到文件。我的可执行应用程序和program.exe 位于同一个文件夹中。

我怎样才能避免这种情况?

【问题讨论】:

  • @RoyiNamir 好吧,我无法控制我的用户想要安装应用程序的位置:P
  • 你应该像 !File.Exists(@"C:\Program Files\etc\program.exe") 一样使用它
  • 所以去掉反斜杠.....**另外**如果你安装了一个程序——你应该通过注册表读取安装目录。
  • @royinamir 我该怎么做?

标签: c# path


【解决方案1】:

虽然可能看起来路径与它有关,但它是工作目录。试试这个代码:

var path = Path.Combine(
    Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
        "program.exe");
if (!File.Exists(path))

它启动的路径不会导致该代码失败。但是,当工作目录不是预期的时候;会的。

此外,永远不要假设您位于特定目录中。始终提供完全合格的路径。 SaveFileDialogOpenFileDialog 等对象可以在运行时更改您的工作目录。

【讨论】:

  • 这条路径的结果是C:\app\bin\Release\MyApplication.exe\program.exe",所以这行不通
  • @Wilhelmsen,这个“program.exe”到底在哪里?
  • 与我的可执行文件在同一个文件夹中。这是我的应用程序必须不时在后台运行的程序。
  • @Wilhelmsen,当然。 Location 属性返回可执行文件名称。我明白了。
【解决方案2】:

只需获取执行目录路径并将其附加到您的exe 文件名

string DirPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
if(!File.Exists(DirPath + @"\program.exe"))
    MessageBox.Show("File not found");

【讨论】:

    【解决方案3】:

    我只需从方法File.Exists(@"program.exe") 的参数中删除"\",并通过GetCurremtDirectory 检查当前工作目录以确保您传递的相对路径(相对的path) 构造正确的可执行文件的完整路径。

    【讨论】:

      【解决方案4】:
      File.Exist(@"\program.exe")
      

      将检查驱动器根目录中的 program.exe,例如,如果您的程序从 c: 运行,则为 c:\program.exe

      【讨论】:

        【解决方案5】:

        要检查您的文件在“当前目录”中是否存在,您不必输入“\”字符。所以:

        if(!File.Exists("program.exe"))
            MessageBox.Show("File not found");
        

        Here一点解释。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-09
          • 1970-01-01
          • 2019-07-23
          • 2017-10-18
          • 2021-12-01
          相关资源
          最近更新 更多