【问题标题】:Cannot find file path找不到文件路径
【发布时间】:2015-08-25 10:00:03
【问题描述】:

我使用的是 Windows CE 6.0。我正在开发一个需要读取 XML 文件 (bar.xml) 的应用程序,该文件位于我的可执行文件 (foo.exe) 旁边。

我尝试使用以下方法访问它,在我的 Main() 之后调用:

private void ParseXmlFile(string _sFileName)
{
    XmlDocument l_doc = new XmlDocument();
    l_doc.Load(_sFileName);
}

现在,当从 Windows CE 控制台启动我的应用程序时:

foo.exe bar.xml

我收到的只是一个异常声明:找不到文件 '\bar.注意这里的“\”。我也试过了:

foo.exe bar.xml
foo.exe .\bar.xml
foo.exe ./bar.xml

我的应用程序在\Hard Disk\ftp\Test\下

如果我将文件放在“硬盘”文件夹下,一切都很好。当然,我不希望我的文件在这里。如何告诉我的应用程序在与我的应用程序相同的文件夹中查找此文件?

编辑:
在@Thomas 发表评论后,我检查了我的路径,发现我确实在正确的文件夹中(\Hard Disk\ftp\Test)。

我不得不使用下面的代码来获取路径(因为 Compact framework 2.0):

string l_sFullAppName = Assembly.GetCallingAssembly().GetName().CodeBase;
string l_sFullAppPath = Path.GetDirectoryName(l_sFullAppName);

XmlDocument l_doc = new XmlDocument();
l_doc.Load(_l_sFullAppPath + '\\bar.xml');

它有效,但对我来说似乎不是很方便。还有其他想法吗?

【问题讨论】:

  • 检查Application.executablepath,如果您的应用程序真的在您认为的位置执行。
  • 这是一个控制台应用程序,我不能拥有 Application.executablepath。我尝试关注this,但我无法获得 Location 属性。我不知道为什么。我的 System.dll 参考位于“C:\Program Files (x86)\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\System.dll”下,并且确实在 2.0 版中。
  • @leppie 我指定了 c#-2.0,因为我绝对需要框架 2.0。错了吗?
  • 还有这个 :Environment.GetCommandLineArgs()[0]; ?
  • 我没有,估计是因为我用的是compact framework的framework 2.0。

标签: c# path windows-ce c#-2.0 relative-path


【解决方案1】:
  1. 确定完整的可执行目录。见HOW TO: Determine the Executing Application's Path。内容适用于.NET Compact Framework。 Note,即 System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase 以 URL 形式返回程序集的位置,但 System.Reflection.Assembly.GetExecutingAssembly().Location 返回完整路径或 UNC 位置(请参阅 here)。
  2. 使用Path.Combine() 方法将字符串组合成一个结果路径。

结果你的代码可能是这样的:

var fullPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
var fullFileName = System.IO.Path.Combine(fullPath, _sFileName);

【讨论】:

  • 感谢您的回答。我不知道 Path.Combine(),我只是使用字符串连接将我的文件名添加到我的文件路径中。这太有趣了。感谢您的宝贵时间。
  • 没问题。使用Path.Combine() 是组合路径字符串的最佳实践。例如查看related question的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-17
  • 2012-09-03
  • 2013-08-10
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多