调试c#/ .NET中的文件句柄问题

时间:2012-01-19 22:25:38

标签: c# .net debugging visual-studio-debugging filehandle

我有一个程序反过来访问DLL。它以各种方式使用文件,创建它们,复制它们并将它们建立为emailMessage对象的附件。我有一个'正在使用的文件'错误,防止覆盖文件。

是否有任何工具或技术可以简化流程 - 例如某种警告创建/删除包含特定字符串的句柄?我查看了进程资源管理器,进程监视器(filemon的继承者)等但没有运气。

我可以继续打猎,但认为可能有更好的方法,而不是通过代码继续我的非正式调查。

修改

感谢您的评论。关于问题,结构有点复杂。我的“客户端”应用程序引用了“引擎”dll(也在C#中)。两者都是我自己的。客户端创建“附件”实例,每个附件都包含对各种文件的文件引用。它的构造函数抓取引用的文件,并将副本放在临时文件夹中。稍后,一组“操作”构建电子邮件 - 它将每个附件添加为EmailMessage对象的“真实”附件。在不同的时间我处理对象并将它们的引用设置为null,但是如果我太早做,那么我最终会得到null引用异常。如果我做得太晚了,该死的东西都在用!我确信我可以在适当的时候追捕这个特定的错误,但它让我想知道是否有一个有用的标准方法被知道的人使用。 :)

2 个答案:

答案 0 :(得分:3)

Procmon会告诉你谁(即哪个进程)正在打开文件,以及打开它的地方的(非托管)堆栈。

C#/ .NET中出现此问题的常见原因是人们打开文件流并且在完成文件流时不进行处理。这意味着文件保持打开状态,直到(至少)下一个垃圾收集,这可能是很久以前的。

答案 1 :(得分:2)

听起来你正在寻找一种工具来让你知道调试时锁定文件的内容。如果是这样,您可以使用Unlocker来确定锁定文件的过程。