我正在编写一个名为“BatchReader”的C#解决方案。在这个应用程序中,我有一个从FileInfo对象实例化的XMLDocument对象。 FileInfo对象是通过从我的app.config文件获取一组文件夹路径创建的,并存储在名为uncPaths的String数组中。这些文件夹路径类似于:
\\ devServer \应用\ BatchReader \内向\误差
Boolean retVal = LogonUser("user", "domain", "pw",LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, out safeTokenHandle);
if (!retVal)
{
int error = Marshal.GetLastWin32Error();
throw new Win32Exception(error);
}
using (safeTokenHandle)
{
using (WindowsIdentity newID = new WindowsIdentity(safeTokenHandle.DangerousGetHandle()))
{
using (WindowsImpersonationContext impersonatedUser = newID.Impersonate())
{
foreach (String networkPath in uncPaths)
{
DirectoryInfo dir = new DirectoryInfo(networkPath);
if(!dir.Exists)
{
continue;
}
FileInfo[] files = dir.GetFiles(fileMaskString);
foreach(FileInfo file in files)
{
using (FileStream fs = file.OpenRead())
{
xmlDoc = new XmlDocument();
xmlDoc.Load(fs);
}
XPathNavigator nav = xmlDoc.CreateNavigator();
XPathNavigator searchNode = nav.SelectSingleNode(xPathQuery);
if(searchNode!=null)
{
DataSet xmlAsDataSet = new DataSet();
XmlNodeReader xnr = new XmlNodeReader(xmlDoc);
xmlAsDataSet.ReadXml(xnr);
}
}
}
用户从一组下拉列表中进行选择,以确定xPath字符串和文件名掩码。单步执行代码,我知道我能够成功从这个FileInfo对象中检索数据。然后,我将此XML文档转换为DataSet以供以后处理。
当我在我的机器上运行此代码时,代码正确执行。但是,当我让测试人员在他们的机器上逐步执行代码时,当下面的代码行执行时,我得到一个FileNotFoundException:
xmlAsDataSet.ReadXml(xnr);
奇怪的是,此异常的错误消息指向我的应用程序的调试可执行(.exe)文件。 (例如:C:\ BatchReader \ bin \ Debug \ BatchReader.exe)。
有人可以解释为什么DataSet.ReadXML会以某种方式考虑BatchReader.exe文件的位置吗?