磁盤空間緊張,需要移除不需要的文件,但我不知道要刪除多少個文件才能騰出足夠的空間。有時,刪除了一堆的小文件,還是不夠。此資源包容一個VS2012項目FindAllHudgeFiles源碼,在bin文件夾下可以得到可運行的exe文件。本程序使用C#和WPF開發(fā),用途為查找指定文件夾下的大文件。
這一工具雖小,但用到的技術可不少。由于充分地應用了現(xiàn)成的技術與組件,比如DataGrid本身就己經(jīng)有很強大的功能,使得整個程序代碼量不大,界面友好性也不錯。如果采用Java開發(fā),工作量要大不少,最關鍵的是Java桌面應用性能夠嗆;如果用C++開發(fā)非托管版本,問題是開發(fā)效率太低,即使這樣一個小程序,恐怕也得花不少時間(可能得一星期)才能實現(xiàn)C#版本的所有功能,不過C++版本會擁有一個好處,所有Windows下均可運行,并不需要安裝.NET。
解決方案:
與其刪除一堆的“小文件”,不如只關注“大文件”。為此,可以寫一個小工具,搜索指定文件夾下的所有大于指定大小的文件。
技術選型:
本程序采用WPF開發(fā),基于.NET 4.0。項目格式:Visual Studio 2012,開發(fā)語言:C#,如果使用Visual studio 2010,請自行創(chuàng)建一個WPF項目,將源碼移入即可編譯。
運行環(huán)境:
安裝了.NET Framework 4.0的Windows計算機。在Windows 7 64位旗艦版下測試通過。
界面設計:
按照人們在找到文件后最需要的功能,設計程序界面如下:
中間的文件列表采用DataGrid控件,其它的都是簡單的WPF控件,總體布局使用DockPanel,支持界面大小的動態(tài)調整。
編程技術關鍵點:
(1)搜索功能采用.NET 4.0所提供的PLINQ完成,使用線程統(tǒng)一取消模型取消操作。
(2)由于搜索是在獨立的線程中完成的,因此,更新界面的工作用到了Dispatcher對象,將UI更新代碼推送到UI線程中執(zhí)行。
(3)在查找文件過程中,部分系統(tǒng)文件夾會因權限問題而無法讀取文件,故需妥善處理UnauthorizedAccessException異常。
(4)找到文件后,需要將文件名顯示在列表中,為此設計了一個FoundFile類封裝這些信息。顯示工作利用了WPF強大的數(shù)據(jù)綁定機制。因此讓FoundFile類實現(xiàn)INotifyPropertyChanged接口,并且將FoundFile對象放到ObservableCollection泛型集合中,綁定到DataGrid。這里需要指出的是,發(fā)現(xiàn)WPF數(shù)據(jù)綁定支持跨線程更新DataGrid,從而大大地減少了代碼編寫量。
(5)找到的文件大小是字節(jié),為此,編寫一個NumberConverter類,將其轉換為常見的K,M、G等,設計WPF數(shù)據(jù)綁定機制使用它來進行數(shù)值轉換(詳看DataGrid的綁定表達式)