“軟體工具開發系列”之
WPF開發“尋找大檔案”工具
說明:
出於各種原因和目的,我先後寫了一些實用小程式,打算有時間的話將它們公布出來,一是希望這些小工具能確實能解決一些人的實際問題,二是給我的許多學生和軟體開發愛好者一些“看得到”的執行個體以供借鑒。我盡量隨文章一起發布樣本源碼,但由於種種現實原因,有些程式可能只提供安裝程式或可運行版本,有些程式則只能通過文章展示介面、開發思路和技術要點,程式本身不公開發布。
凡提供源碼的,大家可以自由地修改與使用。
這是本系列的第一篇,希望大家能喜歡這個小工具。
金旭亮
2012.8.22
======================================================================
情境:
磁碟空間緊張,需要移除不需要的檔案,但我不知道要刪除多少個檔案才能騰出足夠的空間。有時,刪除了一堆的小檔案,還是不夠。
解決方案:
與其刪除一堆的“小檔案”,不如只關注“大檔案”。為此,可以寫一個小工具,搜尋指定檔案夾下的所有大於指定大小的檔案。
技術選型:
本程式採用WPF開發,基於.NET 4.0。項目格式:Visual Studio 2012,開發語言:C#
如果使用Visual studio 2010,請自行建立一個WPF項目,將源碼移入即可編譯。
運行環境:
安裝了.NET Framework 4.0的Windows電腦。在Windows 7 64位旗艦版下測試通過。
介面設計:
按照人們在找到檔案後最需要的功能,設計程式介面如下:
中間的檔案清單採用DataGrid控制項,其它的都是簡單的WPF控制項,總體布局使用DockPanel,支援介面大小的動態調整。
編程技術關鍵點:
(1)搜尋功能採用.NET 4.0所提供的PLINQ完成,使用線程統一取消模型取消操作。
(2)由於搜尋是在獨立的線程中完成的,因此,更新介面的工作用到了Dispatcher對象,將UI更新程式碼推送到UI線程中執行。
(3)在尋找檔案過程中,部分系統檔案夾會因許可權問題而無法讀取檔案,故需妥善處理UnauthorizedAccessException異常。
(4)找到檔案後,需要將檔案名稱顯示在列表中,為此設計了一個FoundFile類封裝這些資訊。顯示工作利用了WPF強大的資料繫結機制。因此讓FoundFile類實現INotifyPropertyChanged介面,並且將FoundFile對象放到ObservableCollection泛型集合中,綁定到DataGrid。這裡需要指出的是,發現WPF資料繫結支援跨線程更新DataGrid,從而大大地減少了代碼編寫量。
(5)找到的檔案大小是位元組,為此,編寫一個NumberConverter類,將其轉換為常見的K,M、G等,設計WPF資料繫結機制使用它來進行數值轉換(詳看DataGrid的綁定運算式)
小結:
這一工具雖小,但用到的技術可不少。由於充分地應用了現成的技術與組件,比如DataGrid本身就己經有很強大的功能,使得整個程式碼量不大,介面友好性也不錯。如果採用Java開發,工作量要大不少,最關鍵的是Java案頭應用效能夠嗆;如果用C++開發非託管版本,問題是開發效率太低,即使這樣一個小程式,恐怕也得花不少時間(可能得一星期)才能實現C#版本的所有功能,不過C++版本會擁有一個好處,所有Windows下均可運行,並不需要安裝.NET。
想瞭解本程式中用到的PLINQ技術可參考本人拙著《.NET 4.0物件導向編程漫談》之《應用篇》。
請訪問CSDN下載頻道擷取項目源碼及exe檔案:
點擊此連結下載WPF開發“尋找大檔案”工具FindAllHudgeFiles源碼