簡體   English   中英

調試c#/ .NET中的文件句柄問題

[英]Debugging file handle issues in c#/.NET

我有一個程序,反過來訪問DLL。 它以各種方式使用文件,創建它們,復制它們並將它們建立為emailMessage對象的附件。 我有一個'正在使用的文件'錯誤,防止覆蓋文件。

是否有任何工具或技術來簡化過程 - 例如某種警告創建/刪除包含特定字符串的句柄? 我查看了進程資源管理器,進程監視器(filemon的繼任者)等但沒有運氣。

我可以繼續打獵,但認為可能有更好的方法,而不是通過代碼繼續我的非正式調查。

編輯

感謝您的評論。 關於問題,結構有點復雜。 我的“客戶端”應用程序引用了“引擎”dll(也在C#中)。 兩者都是我自己的。 客戶端創建“附件”實例,每個附件都包含對各種文件的文件引用。 它的構造函數抓取引用的文件,並將副本放在臨時文件夾中。 稍后,一組“操作”構建電子郵件 - 它將每個附件添加為EmailMessage對象的“真實”附件。 在不同的時間我處理對象並將它們的引用設置為null,但是如果我太早做,那么我最終會得到null引用異常。 如果我做得太晚了,該死的東西都在用! 我確信我可以在適當的時候追捕這個特定的錯誤,但它讓我想知道是否有一個有用的標准方法被知道的人使用。 :)

Procmon將告訴您誰(即哪個進程)正在打開文件,以及打開它的地方的(非托管)堆棧。

C#/ .NET中出現此問題的常見原因是人們打開文件流並且在完成它們時不進行處理。 這意味着文件保持打開狀態,直到(至少)下一個垃圾收集,這可能是很久以前的。

聽起來你正在尋找一種工具來讓你知道調試時鎖定文件的內容。 如果是這樣,您可以使用Unlocker來確定鎖定文件的進程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM