递归法实现一键清空

王朝vc·作者佚名  2006-01-17
宽屏版  字体: |||超大  

递归法实现一键清空

作者:同济大学 02 级计算机系 David

下载源代码

本人刚学VC不久,近来做了一个一键清空的小软件,主要是为了保护个人隐私,该软件清除的内容包括:我最近的文档,IE访问记录,上网历史记录,地址栏URL记录,清除REALPLAY播放列表,清除REALONE播放列表。该软件支持9X/2000/XP/2003,在同学的电脑上实验过,效果不错。

运行画面如图一:

图一 一键清空运行画面

1、核心代码

该软件的核心代码是ClearDir函数:

void CClearAllDlg::ClearDir(CString str)

{

CFileFind ff;

CString szDir=str;

if (szDir.Right(1)!="\\") szDir+="\\";

szDir+="*.*";

BOOL bfile=ff.FindFile(szDir);

while (bfile)

{

bfile=ff.FindNextFile();

if (ff.IsDirectory() && !ff.IsDots()) ClearDir(ff.GetFilePath());

else if (!ff.IsDots() && !ff.IsDirectory()) DeleteFile(ff.GetFilePath());

}

ff.Close();

}

该函数用递归法清除了一个目录下的所有文件和子目录。只需传递给它需要清除的文件夹的路径即可。

2、判断操作系统

先获取操作系统的信息,然后判断版本号,代码如下:

OSVERSIONINFO os;

os.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

GetVersionEx(&os);

//如果是WIN 2000以上

if (os.dwPlatformId==VER_PLATFORM_WIN32_NT)

{

…………

}

//如果是WIN 9X

if (os.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)

{

…………

}

3、构造清除的路径

由于9X和NT系统存放"最近文档","历史记录"的文件夹不相同,所以必须分别考虑。在9X下,最近文档和历史记录的目录分别为"盘符:\\WINDOWS\\Recent\\""盘符:\\WINDOWS\\History\\",所以只需清除这两个固定目录即可。在NT下,由于支持多用户,这些路径中间需要加上"用户名"或者"计算机名.用户名"的字符串。所以构造起来稍微麻烦一点,具体请参考源代码。

4、清除注册表记录

我用了一个类CRegistry,来清除一些注册表中的记录,请参考源代码。

欢迎来信交流

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有