C/C++编程遍历文件夹,统计当前文件个数,输出文件名
比如一个文件夹里还有文件夹,每个文件夹里还有不同个数的文件,怎样用C或者C++编程,遍历各个文件,统计文件个数...
比如一个文件夹里还有文件夹,每个文件夹里还有不同个数的文件,怎样用C或者C++编程,遍历各个文件,统计文件个数
展开
2个回答
展开全部
#include<vector>
#include<iostream>
#include<windows.h>
using namespace std;
void searchFileInDirectroy( const string& dir, vector<string>& outList )
{
WIN32_FIND_DATA findData;
HANDLE hHandle;
string filePathName;
string fullPathName;
filePathName = dir;
filePathName += "\\*.*";
hHandle = FindFirstFile( filePathName.c_str(), &findData );
if( INVALID_HANDLE_VALUE == hHandle )
{
cout<<"Error"<<endl;
return;
}
do
{
if( strcmp(".", findData.cFileName) == 0 || strcmp("..", findData.cFileName) == 0 )
{
continue;
}
fullPathName = dir;
fullPathName += "\\";
fullPathName += findData.cFileName;
if( findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
{
searchFileInDirectroy( fullPathName, outList );
}
else
{
outList.push_back(fullPathName);
}
} while( FindNextFile( hHandle, &findData ) );
FindClose( hHandle );
}
int main()
{
vector<string> pathList;
searchFileInDirectroy("D:\test", pathLIst);
return 0;
}
searchFileInDirectroy 就是用来遍历指定文件夹下的文件及其子目录的。聪明的你一定知道它为什么可以遍历子目录!对啦,这个函数内部判断了取到的文件的属性是否是目录( if( findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) ),如果是,就要递归调用本身函数,直到没有子目录为止。如果你不需要查询子目录,我想你应该知道怎么做。
我用的是远程登录,所以代码没办法copy过来,以上代码都是我手敲的,如果编译有错你就试着改改吧,函数本身的算法是可以工作的。
#include<iostream>
#include<windows.h>
using namespace std;
void searchFileInDirectroy( const string& dir, vector<string>& outList )
{
WIN32_FIND_DATA findData;
HANDLE hHandle;
string filePathName;
string fullPathName;
filePathName = dir;
filePathName += "\\*.*";
hHandle = FindFirstFile( filePathName.c_str(), &findData );
if( INVALID_HANDLE_VALUE == hHandle )
{
cout<<"Error"<<endl;
return;
}
do
{
if( strcmp(".", findData.cFileName) == 0 || strcmp("..", findData.cFileName) == 0 )
{
continue;
}
fullPathName = dir;
fullPathName += "\\";
fullPathName += findData.cFileName;
if( findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
{
searchFileInDirectroy( fullPathName, outList );
}
else
{
outList.push_back(fullPathName);
}
} while( FindNextFile( hHandle, &findData ) );
FindClose( hHandle );
}
int main()
{
vector<string> pathList;
searchFileInDirectroy("D:\test", pathLIst);
return 0;
}
searchFileInDirectroy 就是用来遍历指定文件夹下的文件及其子目录的。聪明的你一定知道它为什么可以遍历子目录!对啦,这个函数内部判断了取到的文件的属性是否是目录( if( findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) ),如果是,就要递归调用本身函数,直到没有子目录为止。如果你不需要查询子目录,我想你应该知道怎么做。
我用的是远程登录,所以代码没办法copy过来,以上代码都是我手敲的,如果编译有错你就试着改改吧,函数本身的算法是可以工作的。
展开全部
这个要正对不同的操作系统,不同的操作系统,文件节点的存放方式不一样,读取的方式就不一样了。
可以利用for循环,像Linux dir=opendir (dirname)打开文件夹,返回目录指针,dp=readdir(dir)利用读目录,返回一行行读取目录的文件结构体指针,指针中存的有文件属性,是文件,还是文件夹。
通过判断是文件或者文件夹:
如果是文件,就就输出文件名dp->name
否则,就是一个文件夹 继续dir1=opendir(dp->name),dp1=readdir(dir1)..
一直循环到判断不到目录了。
windows应该也有类似的函数吧,这个我就么有用过了,你找找。
可以利用for循环,像Linux dir=opendir (dirname)打开文件夹,返回目录指针,dp=readdir(dir)利用读目录,返回一行行读取目录的文件结构体指针,指针中存的有文件属性,是文件,还是文件夹。
通过判断是文件或者文件夹:
如果是文件,就就输出文件名dp->name
否则,就是一个文件夹 继续dir1=opendir(dp->name),dp1=readdir(dir1)..
一直循环到判断不到目录了。
windows应该也有类似的函数吧,这个我就么有用过了,你找找。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询