#include <iostream>
#include <windows.h>
#include <string>
#include <tchar.h>
#include <fstream>
#include <sys\stat.h>
#include <sys/types.h>
using namespace std;
#ifdef _UNICODE
#define TCHAR wchar
#else
#define TCHAR char
#endif
//file stream
fstream fStream;
void file_scan(char* root)
{
char *filePath = (char*)malloc(sizeof(char)*MAX_PATH);
memset(filePath,0,MAX_PATH);
strcpy(filePath, root);
if( filePath[strlen(filePath) -1] != '\\' )
{
strcat(filePath, "\\");
}
strcat(filePath, "*");
WIN32_FIND_DATA fd;
memset(&fd,0,sizeof(WIN32_FIND_DATA));
HANDLE hSearch;
hSearch = FindFirstFile(filePath, &fd);
memset(filePath,0,MAX_PATH);
// the file is a dir , its name should not be '.','..', and not begin with '$'
if( (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
&& (fd.cFileName[0]!='.') &&(fd.cFileName[0]!='$') )
{
strcpy(filePath, root);
strcat(filePath, fd.cFileName);
//recursion
file_scan(filePath);
}
// normal file
else if( strcmp(fd.cFileName, "")&&strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, "..")&& fd.cFileName[0]!='$')
{
strcpy(filePath,root);
strcat(filePath,"\\");
strcat(filePath,fd.cFileName);
struct _stat fileinfo;
_stat(filePath, &fileinfo);
cout<<root<<'\\'<<fd.cFileName<<'\t'<<fileinfo.st_size<<endl;
}
BOOL bSearchFinished = FALSE;
while( !bSearchFinished )
{
if( FindNextFile(hSearch, &fd) )
{
memset(filePath,0,MAX_PATH);
if( (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
&& strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, "..") )
{
strcpy(filePath, root);
memset(filePath+strlen(filePath),0,MAX_PATH-strlen(filePath));
if(filePath[strlen(filePath)]!='\\')
{
filePath[strlen(filePath)]='\\';
filePath[strlen(filePath)+1]='\0';
}
strcat(filePath, fd.cFileName);
file_scan(filePath);
}
else if(strcmp(fd.cFileName, "")&&strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, "..")&& fd.cFileName[0]!='$')
{
strcpy(filePath,root);
strcat(filePath,"\\");
strcat(filePath,fd.cFileName);
struct _stat fileinfo;
_stat(filePath, &fileinfo);
cout<<root<<'\\'<<fd.cFileName<<'\t'<<fileinfo.st_size<<endl;
}
}
else
{
if( GetLastError() == ERROR_NO_MORE_FILES ) //Normal Finished
bSearchFinished = TRUE;
else
bSearchFinished = TRUE; //Terminate Search
}
}
FindClose(hSearch);
delete filePath;
filePath = NULL;
}
int main(int argc,char** argv)
{
char dir[MAX_PATH] = "c:\\";
file_scan(dir);
system("pause");
}
没有合适的资源?快使用搜索试试~ 我知道了~
递归遍历指定目录所有的文件优化版本(不会栈溢出)
共1个文件
cpp:1个
3星 · 超过75%的资源 需积分: 50 10 下载量 117 浏览量
2013-08-01
12:18:20
上传
评论
收藏 1KB ZIP 举报
温馨提示
递归遍历指定目录所有的文件优化版本,自测无堆栈溢出,可直接拿来使用,如有问题,联系我
资源推荐
资源详情
资源评论
收起资源包目录
FileScan.zip (1个子文件)
FileScan.cpp 3KB
共 1 条
- 1
资源评论
- Tachycardie2018-06-07什么鬼东西
- 普通网友2014-06-12可以作为参考
- koxiaolong2014-03-17单一文件,只能参考
llhyy17
- 粉丝: 25
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功