找不到文件路径
Cannot find file path
我正在使用 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
我的申请在\HardDisk\ftp\Test\
下
如果我把我的文件放在 "Hard Disk" 文件夹下,一切都很好。当然,我不希望我的文件在这里。我如何告诉我的应用程序在与我的应用程序相同的文件夹中查找此文件?
编辑:
在@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');
它能用,但对我来说似乎不是很方便。还有其他想法吗?
- 确定完整的可执行目录。参见 HOW TO: Determine the Executing Application's Path. The contents is applicable to .NET Compact Framework. Note, that
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
returns location of the assembly as a URL, but System.Reflection.Assembly.GetExecutingAssembly().Location
returns full path or UNC location (see here)。
- 使用 Path.Combine() 方法将字符串组合到结果路径中。
结果你的代码可能是这样的:
var fullPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
var fullFileName = System.IO.Path.Combine(fullPath, _sFileName);
我正在使用 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
我的申请在\HardDisk\ftp\Test\
下如果我把我的文件放在 "Hard Disk" 文件夹下,一切都很好。当然,我不希望我的文件在这里。我如何告诉我的应用程序在与我的应用程序相同的文件夹中查找此文件?
编辑:
在@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');
它能用,但对我来说似乎不是很方便。还有其他想法吗?
- 确定完整的可执行目录。参见 HOW TO: Determine the Executing Application's Path. The contents is applicable to .NET Compact Framework. Note, that
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
returns location of the assembly as a URL, butSystem.Reflection.Assembly.GetExecutingAssembly().Location
returns full path or UNC location (see here)。 - 使用 Path.Combine() 方法将字符串组合到结果路径中。
结果你的代码可能是这样的:
var fullPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
var fullFileName = System.IO.Path.Combine(fullPath, _sFileName);