【发布时间】:2012-01-19 22:25:37
【问题描述】:
我有一个程序反过来访问 DLL。它以各种方式使用文件,创建、复制它们并将它们建立为 emailMessage 对象的附件。我有一个“正在使用的文件”错误,阻止了文件的覆盖。
是否有任何工具或技术可以简化流程 - 例如,对包含特定字符串的句柄的创建/删除发出某种警告?我查看了进程资源管理器、进程监视器(filemon 的继任者)等,但没有运气。
我可以继续寻找,但认为可能有比继续通过代码进行非正式调查更好的方法。
编辑
感谢 cmets。关于问题,结构有点复杂。我有我的“客户端”应用程序,它引用了一个“引擎”dll(也在 C# 中)。两个都是我自己的。客户端创建“附件”实例,每个附件都包含对各种文件的文件引用。它的构造函数获取引用的文件,并将副本放在临时文件夹中。稍后,一组“操作”构建电子邮件 - 它将每个附件作为“真实”附件添加到 EmailMessage 对象。在不同的时间,我处理对象并将它们的引用设置为 null,但如果我做得太早,那么我最终会遇到 null 引用异常。如果我做得太晚,那该死的东西正在使用中!我确信我可以在适当的时候找到这个特定的错误,但它让我想知道是否有一个有用的标准方法可供知情人士使用。 :)
【问题讨论】:
-
我的第一个想法是推荐 Process Explorer,但我看到您已经尝试过了。运气不好,嗯?
-
文件句柄(Filestream 等)的创建完全在您的应用程序中,还是还涉及外部进程?
-
文件使用错误。您是否有权访问调用/创建文件的代码。?如果是这样,它可能没有被正确发布,或者如果它是 C# 代码,文件流的更新不正确也可能导致这种情况。你有创建文件/附件的代码示例吗?这个 DLL 托管代码还是非托管代码..??
-
作为对附加信息的回复 - 我认为保存对文件的“引用”的标准方法是作为文件名传递而无需担心生命周期问题。让您的附件对象保存文件的文件名,而不是流,然后该对象根本不需要是一次性的。
-
您好。我确实这样做了,但是当您开始创建附件并将其添加到 EmailMessage 的附件集合时,它会变得有点混乱。如果您添加它,然后取消引用,它往往也会在电子邮件消息中破坏它。我必须承认我不是引用类型如何工作的专家,所以我需要对每个引用类型的指向进行更多调查。谢谢
标签: c# .net debugging visual-studio-debugging filehandle