其实windows系统编程也不是太难, 比如说这个, 挺有意思的:
引用作者的一段话:
在开发软件的过程里,经常需要维护目录里的数据。比如在开发银行的信用卡系统里,由于每天创建的LOG非常多,那么一个很大的硬盘,在6个月后,就占用了很多空间。这时就有这样的一个需求,把所有超过6个月的LOG数据定期删除掉。要实现这个功能就得遍历整个目录,把文件名称和文件创建的时间都超过6个月时间的文件删除掉。因此,就需使用到下面的API函数FindFirstFile和FindNextFile来实现这样的功能,FindFirstFile函数是查找到目录下的第一个文件或目录,FindNextFile函数是查找下一文件或目录。
且看代码:
find.h:
#pragma once #include <windows.h> #include <winbase.h>
class CFindFile { protected: HANDLE m_hFind; bool m_bFound; WIN32_FIND_DATA m_FindFileData; public: CFindFile() { m_hFind = INVALID_HANDLE_VALUE; m_bFound = false; memset(&m_FindFileData, 0, sizeof(m_FindFileData)); }
~CFindFile(void) { if(m_hFind != INVALID_HANDLE_VALUE) { ::FindClose(m_hFind); } }
void First(LPCTSTR lpFileName) { m_hFind = ::FindFirstFile(lpFileName, &m_FindFileData); if(m_hFind != INVALID_HANDLE_VALUE) m_bFound = true; else m_bFound = false; }
void Next() { m_bFound = FindNextFile(m_hFind, &m_FindFileData) ? true : false; }
bool isOk() const { return m_bFound; }
const WIN32_FIND_DATA& GetCurFile() { return m_FindFileData; } };
|
驱动文件:
find.cpp:
#include <windows.h> #include <winbase.h> #include <tchar.h> #include <iostream> #include "find.h" using namespace std;
int main(int argc, LPTSTR argv[]) { CFindFile findDemo; for(findDemo.First(_T("c:/Downloads/*")); findDemo.isOk(); findDemo.Next()) { OutputDebugString(findDemo.GetCurFile().cFileName); OutputDebugString(_T("\r\n")); cout << findDemo.GetCurFile().cFileName << "\t" << findDemo.GetCurFile().nFileSizeLow / 1024.0 / 1024.0 << "MB" << endl;
} }
|
运行结果:
. 0MB
.. 0MB
NokiaSoftwareUpdaterSetup_zh_cn.exe 23.3629MB
WinDjView-1.0.3-Setup.exe 3.29331MB
中国不高兴.doc 0.360352MB
cryes_setup.exe 4.37286MB
myfiles_meihuabao_v10.zip 5.2649MB
EasyRecovery6.rar 27.8942MB
MformatV1.00.zip 0.268638MB
20090712094958434.rar 0.130648MB
flashget_16372_1.exe 4.51773MB
lunwen.doc 1.69971MB
waybackintolovedemo.mp3 5.77096MB
FirefoxChinaEdition-latest.exe 8.56723MB
freebsd.doc 0.615234MB
pplivesetup_black_0024.exe 9.74189MB
jdwb_setup7_preview.rar 6.27772MB
1.exe 13.525MB
请按任意键继续. . .
阅读(2143) | 评论(0) | 转发(0) |