遍历磁盘文件的递归和非递归算法
2009-03-21 10:15
127 查看
1.遍历文件的递归算法 /************************************************************************/
/* 获得磁盘 */
/************************************************************************/
char driver[] = "A://";
while(i <= 0xFFFF)
{
if (DriverNum & i)
{
drivertype = GetDriveType(driver);
if (drivertype == DRIVE_FIXED || drivertype == DRIVE_REMOVABLE)
{
BrowseFile(0, driver);
}
}
driver[0] ++;
i = i << 1;
}
void BrowseFile(CString strFile)
{
CFileFind filefind;
CString szDir = strFile;
if (szDir.Right(1) != "//")
{
szDir += "//";
}
szDir += "*.*";
BOOL res = filefind.FindFile(szDir);
while (res)
{
res = filefind.FindNextFile();
if (!filefind.IsDots() && filefind.IsDirectory()) //不是.文件夹而是普通的目录文件夹
{
CString strPath = filefind.GetFilePath();
CString strTitle = filefind.GetFileName();
//存储
BrowseFile(CallNum, strPath); //递归调用
}
else if (!filefind.IsDots() && !filefind.IsDirectory()) //是普通的文件
{
CString strPath = filefind.GetFilePath();
CString strTitle = filefind.GetFileTitle();
int index = strPath.ReverseFind('//');
strTitle = strPath.Right(strPath.GetLength() - index - 1); //得到文件名及后缀
//对文件的处理
}
}
filefind.Close();
}
2.遍历文件的非递归算法
这里我用到了STL中的list来存储遍历过程中的文件夹
#include <list>
using namespace std;
BOOL ScanFile(CString strFile)
{
list<CString> filevector;
filevector.push_back(strFile);
CFileFind filefind;
CString szDir;
while(filevector.size() > 0)
{
szDir = filevector.front();
filevector.pop_front();
if (szDir.Right(1) != "//")
{
szDir += "//";
}
szDir += "*.*";
BOOL res = filefind.FindFile(szDir);
while(res)
{
res = filefind.FindNextFile();
if (!filefind.IsDots() && filefind.IsDirectory()) //不是.文件夹而是普通的目录文件夹
{
CString strPath = filefind.GetFilePath();
filevector.push_back(strPath);
}
else if (!filefind.IsDots() && !filefind.IsDirectory()) //是普通的文件
{
CString strPath = filefind.GetFilePath(); //文件路径
CString strTitle = filefind.GetFileTitle();//得不到文件的后缀
//对文件的处理
}
}
filefind.Close();
}
return TRUE;
}
/* 获得磁盘 */
/************************************************************************/
char driver[] = "A://";
while(i <= 0xFFFF)
{
if (DriverNum & i)
{
drivertype = GetDriveType(driver);
if (drivertype == DRIVE_FIXED || drivertype == DRIVE_REMOVABLE)
{
BrowseFile(0, driver);
}
}
driver[0] ++;
i = i << 1;
}
void BrowseFile(CString strFile)
{
CFileFind filefind;
CString szDir = strFile;
if (szDir.Right(1) != "//")
{
szDir += "//";
}
szDir += "*.*";
BOOL res = filefind.FindFile(szDir);
while (res)
{
res = filefind.FindNextFile();
if (!filefind.IsDots() && filefind.IsDirectory()) //不是.文件夹而是普通的目录文件夹
{
CString strPath = filefind.GetFilePath();
CString strTitle = filefind.GetFileName();
//存储
BrowseFile(CallNum, strPath); //递归调用
}
else if (!filefind.IsDots() && !filefind.IsDirectory()) //是普通的文件
{
CString strPath = filefind.GetFilePath();
CString strTitle = filefind.GetFileTitle();
int index = strPath.ReverseFind('//');
strTitle = strPath.Right(strPath.GetLength() - index - 1); //得到文件名及后缀
//对文件的处理
}
}
filefind.Close();
}
2.遍历文件的非递归算法
这里我用到了STL中的list来存储遍历过程中的文件夹
#include <list>
using namespace std;
BOOL ScanFile(CString strFile)
{
list<CString> filevector;
filevector.push_back(strFile);
CFileFind filefind;
CString szDir;
while(filevector.size() > 0)
{
szDir = filevector.front();
filevector.pop_front();
if (szDir.Right(1) != "//")
{
szDir += "//";
}
szDir += "*.*";
BOOL res = filefind.FindFile(szDir);
while(res)
{
res = filefind.FindNextFile();
if (!filefind.IsDots() && filefind.IsDirectory()) //不是.文件夹而是普通的目录文件夹
{
CString strPath = filefind.GetFilePath();
filevector.push_back(strPath);
}
else if (!filefind.IsDots() && !filefind.IsDirectory()) //是普通的文件
{
CString strPath = filefind.GetFilePath(); //文件路径
CString strTitle = filefind.GetFileTitle();//得不到文件的后缀
//对文件的处理
}
}
filefind.Close();
}
return TRUE;
}
相关文章推荐
- 如何递归遍历磁盘文件
- (前、中、后)序遍历二叉树的递归、非递归算法!
- 二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
- C++非递归遍历磁盘文件和递归遍历磁盘文件的程序示例
- 遍历XML树的递归和非递归算法
- 剑指offer面试题19二叉树的镜像和二叉树的前中后遍历递归和非递归算法
- 无向图的邻接矩阵,深度优先遍历广度优先遍历的递归与非递归算法
- 二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
- 前序 中序 后序 遍历 递归 非递归算法 java实现
- 二叉树三种遍历的递归与非递归算法
- 【数据结构】二叉树(前、中、后)序遍历的递归与非递归算法
- 遍历二叉树-递归和非递归算法
- 二叉树的前序遍历、中序遍历和后序遍历的递归和非递归算法
- 二叉树前序遍历的递归与非递归算法
- 二叉树的递归遍历与非递归算法实现
- 建立有向图的邻接表,深度优先遍历和广度优先遍历的递归与非递归算法,判断是否是有向无环图,并输出一种拓扑序列
- 遍历二叉树的递归与非递归算法
- 无向图的邻接矩阵,深度优先遍历和广度优先遍历的递归与非递归算法
- 二叉树的遍历(前序,中序,后序,层序)--递归和非递归算法实现
- 【数据结构】二叉树(前、中、后)序遍历的递归与非递归算法