遍历文件夹方法2
2012-05-27 00:27
288 查看
#include<windows.h>
#include<iostream>
#include<string>
using namespace std;
//只能处理目录:lpPath只能是路径
void find(char *lpPath)
{
char szFind[MAX_PATH];
char szFile[MAX_PATH];
WIN32_FIND_DATA FindFileData;
strcpy(szFind,lpPath);
strcat(szFind,"\\*.*");
HANDLE hFind=::FindFirstFile(szFind,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind) return;
while(TRUE)
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(FindFileData.cFileName[0]!='.')
{
strcpy(szFile,lpPath);
strcat(szFile,"\\");
strcat(szFile,FindFileData.cFileName);
find(szFile);
}
}
else
{
cout<<FindFileData.cFileName<<endl;
}
if(!FindNextFile(hFind,&FindFileData))
break;
}
FindClose(hFind);
}
//可同时处理目录和文件:path可以是路径,也可以是文件名,或者文件通配符
void _find(string path)
{
//取路径名最后一个"\\"之前的部分,包括"\\"
string prefix=path.substr(0,path.find_last_of('\\')+1);
WIN32_FIND_DATA FindFileData;
HANDLE hFind=::FindFirstFile(path.c_str(),&FindFileData);
if(INVALID_HANDLE_VALUE == hFind)
{
cout<<"文件通配符错误"<<endl;
return;
}
while(TRUE)
{
//目录
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
//不是当前目录,也不是父目录
if(FindFileData.cFileName[0]!='.')
{
//查找下一级目录
_find(prefix+FindFileData.cFileName+'\\'+"*.*");
}
}
//文件
else
{
cout<<prefix<<endl;
Sleep(100);
// cout<<FindFileData.cFileName<<endl;
}
if(!FindNextFile(hFind,&FindFileData))
break;
}
FindClose(hFind);
}
void main()
{
// find("E:");//目录:E盘
_find("E:\\TDDOWNLOAD\\会计\\*.*");//E盘下所有文件E:\TDDOWNLOAD\会计
//string str=".\\";
// string path;
// cout<<"请输入文件通配符:"<<flush;
// cin>>path;
// str=str+path;
// find((char*)str.c_str());//可以处理".",".." 不可以处理"*","..\\*"
// _find(str);//可以处理"*","..\\*" 不可以处理".",".."
Sleep(200000);
}
#include<iostream>
#include<string>
using namespace std;
//只能处理目录:lpPath只能是路径
void find(char *lpPath)
{
char szFind[MAX_PATH];
char szFile[MAX_PATH];
WIN32_FIND_DATA FindFileData;
strcpy(szFind,lpPath);
strcat(szFind,"\\*.*");
HANDLE hFind=::FindFirstFile(szFind,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind) return;
while(TRUE)
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(FindFileData.cFileName[0]!='.')
{
strcpy(szFile,lpPath);
strcat(szFile,"\\");
strcat(szFile,FindFileData.cFileName);
find(szFile);
}
}
else
{
cout<<FindFileData.cFileName<<endl;
}
if(!FindNextFile(hFind,&FindFileData))
break;
}
FindClose(hFind);
}
//可同时处理目录和文件:path可以是路径,也可以是文件名,或者文件通配符
void _find(string path)
{
//取路径名最后一个"\\"之前的部分,包括"\\"
string prefix=path.substr(0,path.find_last_of('\\')+1);
WIN32_FIND_DATA FindFileData;
HANDLE hFind=::FindFirstFile(path.c_str(),&FindFileData);
if(INVALID_HANDLE_VALUE == hFind)
{
cout<<"文件通配符错误"<<endl;
return;
}
while(TRUE)
{
//目录
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
//不是当前目录,也不是父目录
if(FindFileData.cFileName[0]!='.')
{
//查找下一级目录
_find(prefix+FindFileData.cFileName+'\\'+"*.*");
}
}
//文件
else
{
cout<<prefix<<endl;
Sleep(100);
// cout<<FindFileData.cFileName<<endl;
}
if(!FindNextFile(hFind,&FindFileData))
break;
}
FindClose(hFind);
}
void main()
{
// find("E:");//目录:E盘
_find("E:\\TDDOWNLOAD\\会计\\*.*");//E盘下所有文件E:\TDDOWNLOAD\会计
//string str=".\\";
// string path;
// cout<<"请输入文件通配符:"<<flush;
// cin>>path;
// str=str+path;
// find((char*)str.c_str());//可以处理".",".." 不可以处理"*","..\\*"
// _find(str);//可以处理"*","..\\*" 不可以处理".",".."
Sleep(200000);
}
相关文章推荐
- C# 遍历指定目录下的所有文件及文件夹以及遍历数据库的方法
- 总结一下java遍历文件夹的方法!
- asp.net遍历文件夹下所有子文件夹并绑定到gridview上的方法
- python遍历文件夹找出文件夹后缀为py的文件方法
- python遍历文件夹的方法
- 三种遍历文件夹方法比较(PERL)
- 使用glob方法遍历文件夹下所有文件
- 利用shell脚本遍历文件夹内所有的文件并作整理统计的方法
- Java遍历文件夹的两种方法
- 遍历文件夹的方法比较
- 递归实现遍历文件夹的两种方法
- php遍历目录与文件夹的多种方法详解
- C#遍历文件夹及其子目录的完整实现方法
- Python遍历文件夹的两种方法比较
- C++遍历文件夹下所有文件的多种方法
- 循环遍历某个文件夹下面的所有文件,递归方法
- VC下遍历文件夹中的所有文件的几种方法
- VC下遍历文件夹的两种方法
- Java遍历文件夹的2种方法
- 文件夹遍历的方法