VC++中用内存映射文件&用CfileFind递归搜索目录
2008-11-13 19:32:48 来源:WEB开发网CloseHandle(hMap);//关闭内存映文件对象句柄RETURNfalse;)以上的程序在VisualC++6.中已调试通过。其他非对话框类型的程序可以在各自的初始化和终止阶段添加类似的代码,只是如果内存映射文件对象的句柄hMap可能在不同函数中使用,那就要将其定义成CwinApp生类的成员变量或是全局变量了。
用CfileFind递归搜索目录
许福 yesky
我们知道CfileFind未提供直接遍历其子目录的功能,而有时候我们却常常要遍历某一目录下的所有文件及其子目录。如我们要删除一个目录,而这个目录下又有子目录,因为Windows不允许删除非空的目录,因此我们必须能够遍历一个目录下的所有子目录,这可以通过简单的递归实现.
下面让我们从一个简单的例子开始:如何删除某一目录?(假设我们通过DeleteDirectory(LPCTSTRDirName)函数完成这一功能)
要删除一个目录,我们要完成下面几步:
1.删除该目录下的所有文件
2.如果该目录中还有子目录我们要递归地调用DeleteDirectory(LPCTSTRDirName)函数,以删除该子目录下的所有文件
3.调用RemoveDirectory(LPCTSTRlpPathName)删除该目录
DeleteDirectory(LPCTSTRDirName)函数的完整实现如下:
BOOLDeleteDirectory(LPCTSTRDirName)
{
CFileFindtempFind;file://声明一个CFileFind类变量,以用来搜索
chartempFileFind[200];file://用于定义搜索格式
sprintf(tempFileFind,"%s*.*",DirName);
file://匹配格式为*.*,即该目录下的所有文件
BOOLIsFinded=(BOOL)tempFind.FindFile(tempFileFind);
file://查找第一个文件
while(IsFinded)
{
IsFinded=(BOOL)tempFind.FindNextFile();file://递归搜索其他的文件
if(!tempFind.IsDots())file://如果不是"."目录
{
charfoundFileName[200];
strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));
if(tempFind.IsDirectory())file://如果是目录,则递归地调用
{file://DeleteDirectory
chartempDir[200];
sprintf(tempDir,"%s%s",DirName,foundFileName);
DeleteDirectory(tempDir);
}
else
{file://如果是文件则直接删除之
chartempFileName[200];
sprintf(tempFileName,"%s%s",DirName,foundFileName);
DeleteFile(tempFileName);
}
}
}
tempFind.Close();
if(!RemoveDirectory(DirName))file://删除目录
{
AfxMessageBox("删除目录失败!",MB_OK);
returnFALSE;
}
returnTRUE;
}
更多精彩
赞助商链接