未找到的文件可能是由Outlook引起的XML文件的例外
-
04-10-2019 - |
题
当Outlook调用我的应用程序时,我发现找不到文件。当将电子邮件保存到计算机时,该应用程序被调用并对保存消息执行操作。
我的应用程序使用XML文件存储可配置的设置,但是当Outlook调用执行应用程序时找不到此文件。如果我手动运行程序,则可以正常运行。
例外的有趣之处在于:
system.io.io.filenotfoundException:找不到文件'c: program files common system msmapi 1033 settingsopened.xml'。
为什么Outlook认为文件在这里?这不是文件的路径,但我敢肯定与Outlook有关。我在代码中引用路径的方式仅为:
XmlDocument xDoc = new XmlDocument();
xDoc.Load("settingsOpened.xml");
文件与.exe在同一文件夹中。我也不想为XML文件的完整路径进行硬编码。
任何帮助将不胜感激。
谢谢,罗斯
解决方案
从显示的代码中,我假设它将当前路径作为查找文件的位置。当前的路径有点不可预测,因为某些操作会影响其值,并且该值在每个呼叫上持续存在。即,当您的应用程序的另一部分甚至其他应用程序设置当前路径时,下次使用此值。要设置当前路径,使用通用对话框浏览某个文件就足够了。
在您的情况下,我会尝试
- 通过从一个知名的文件夹之一(例如用户的应用路径 - 查找)来明确指定路径
Environment.GetFolderPath
和Environment.SpecialFolder
)
或者
- 解决相对于DLL的组装路径的路径。
找到组装路径 myType
您可以使用以下代码:
String strPath = System.IO.Path.GetDirectoryName(typeof(myType).Assembly.CodeBase);
无论哪种情况,您都应考虑在较新的Windows操作系统中,用户没有对系统驱动器的所有路径的写入访问权限。
不隶属于 StackOverflow