“软件工具开发系列”之
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源码