C#写目录问题
我有一个应用程序可以写入C:\驱动器上的文件夹。该程序在我的计算机上运行良好,但在另一台笔记本电脑上运行.exe时(另一台笔记本电脑没有visual studio等),我会收到一个filenotfoundexception,我无法从错误报告中确定发生这种情况的代码行 下面是创建目录的代码(假设这是问题所在) 你知道问题出在哪里吗? 我应该检查书面许可吗C#写目录问题,c#,io,C#,Io,我有一个应用程序可以写入C:\驱动器上的文件夹。该程序在我的计算机上运行良好,但在另一台笔记本电脑上运行.exe时(另一台笔记本电脑没有visual studio等),我会收到一个filenotfoundexception,我无法从错误报告中确定发生这种情况的代码行 下面是创建目录的代码(假设这是问题所在) 你知道问题出在哪里吗? 我应该检查书面许可吗 非常感谢您的帮助 笔记本电脑上是否存在此路径 Environment.SpecialFolder.ApplicationData 在这一行上像
非常感谢您的帮助 笔记本电脑上是否存在此路径
Environment.SpecialFolder.ApplicationData
在这一行上像messagebox.show一样执行debug.writeline并查看路径是什么?
此外,如果路径存在,则可能是权限问题。。最有可能的是,我可能要做的第一件事(出于调试目的)是插入
MessageBox.Show(WriteDirectory.FullName);
在您尝试创建目录之前,请先查看“特殊”路径是否是您认为的路径 使用
抛出代码>而不是抛出e代码>将保留异常中的原始堆栈跟踪
放置Console.WriteLine(例如ToString())(或与MessageBox等效的代码)将输出堆栈跟踪(大多数信息都需要调试构建)
如果所有这些都失败了,跟踪语句的旧标准Console.WriteLine(“即将执行x”)
将有帮助--通过命令行启动应用程序。如果您将.pdb文件与.dll一起部署,您将在异常消息中获得行号
您的try..catch
块没有做任何有用的事情,它所做的只是吞下堆栈跟踪,这样您就看不到发生了什么!我建议完全删除try..catch
块
抛出e代码>导致堆栈跟踪丢失,使用抛出代码>来保存它
您还应该使用System.IO.Path.Combine()
附加目录根和子目录名,这样您就不必担心自己做\
,可能会出错。笔记本电脑上是否安装了.Net framework
其他可能性:平台不支持此目录。检查msdn上的兼容平台我猜这不是真正的问题;两者都不
抛出FileNotFoundException
最好的办法是构建用于调试的应用程序,然后复制该文件及其所有.pdb文件;希望这会在错误消息中为您提供方法和行号
您还可以考虑为任何未处理的异常添加处理程序;可以处理,以便您可以为应用程序中任何地方运行的任何未经处理的异常添加自己的事件处理程序
在主要功能中添加类似的内容
System.AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
然后编写自己的错误处理程序
static void MyHandler(object sender, UnhandledExceptionEventArgs args) {
Exception e = (Exception) args.ExceptionObject;
Console.WriteLine("MyHandler caught : " + e.Message);
}
不要认为特殊文件夹是否存在有什么关系,因为检查“WriteDirectory.exists”将包括这一点。问题是尝试写入C驱动器时出现权限问题。是的,同意存在权限问题,但这很可能是由于尝试在错误的位置创建文件夹造成的,因此值得检查路径是否为安装的预期路径。net framework是否成功创建了目录文件夹。然后它似乎无法写入…但我已取消选中文件夹上的只读框!?
static void MyHandler(object sender, UnhandledExceptionEventArgs args) {
Exception e = (Exception) args.ExceptionObject;
Console.WriteLine("MyHandler caught : " + e.Message);
}