我已經用.NET編寫了一個程序,它通過源目標和目標目錄及其子目錄的所有文件遞歸,比較lastwritetime並根據比較結果將文件複製到/從目的地目錄中刪除。.NET中的某些File.IO對象(如DirectoryInfo)在程序終止後仍保留可移動設備引用
例如,目標目錄是可移動驅動器(usb)上的目錄,即使在程序關閉後,我也無法從我的電腦中刪除USB驅動器。沒有其他程序有USB打開(例如資源管理器),程序不再出現在任務列表中。
該項目工程通過獲取的DirectoryInfo每個目錄和使用
DirectoryInfo dir = new DirectoryInfo(path);
我用的GetFiles來獲取所有文件的子目錄:
var files =dir.GetFiles();
然後一個foreach通過所有文件循環來檢查過濾掉一些文件(手動完成,因爲我想要使用RegEx的多個模式)。
基於正則表達式過濾器未排除的文件被添加到SortedList,一個用於源目錄,另一個用於目標目錄。
這是比較函數使用的。它創建的源列表,並使用使用模式的目的地列表中的枚舉之一:
using (var srcEnum = _srcFileInfos.GetEnumerator())
{
using (var dstEnum = _dstFileInfos.GetEnumerator())
{
... // compare code
}
}
最後,文件副本或使用
File.Copy
File.Delete
刪除的有我俯瞰而言什麼的內存管理,即使在關閉程序後,仍會保留對USB驅動器的引用?
關閉程序後,進程不在進程列表中。 – rekna 2009-08-16 22:15:16
好。我們不再需要考慮一種可能性! – 2009-08-16 22:19:26
這可能是因爲我從USB啓動程序...當我從光盤啓動程序時,它似乎沒有鎖定USB驅動器。我還沒有100%確定。 – rekna 2009-08-19 21:36:33