递归打印当前目录下所有的文件夹以及文件名
作者:
小小蒟蒻
,
2020-10-13 12:26:32
,
所有人可见
,
阅读 456
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <io.h>
#include <time.h>
using namespace std;
string path;
//深度优先递归遍历当前目录下文件夹和文件及子文件夹和文件
void DfsFolder()
{
_finddata_t file;
path += "/*";
long handle = 0;
if (-1L == (handle = _findfirst(path.c_str(), &file))) return; //返回值为-1则查找失败
do {
tm* pt = localtime(&file.time_write);
printf("%04d/%02d/%02d %02d:%02d ",
pt->tm_year + 1900, pt->tm_mon, pt->tm_mday, pt->tm_hour, pt->tm_min);
if (file.attrib & _A_SUBDIR) { //判断是否是子目录
printf(" %-12s %-4s\n", "<DIR>", file.name);
//.是当前目录,..是上层目录,遇到这样两种情况是曾经路过的地方,不必重复再经过
if (strcmp(file.name, ".") && strcmp(file.name, "..")) {
path = path + '/' + file.name; // 在下一次递归之前设定好下一次要搜索的路径
DfsFolder();
}
}
else printf(" %12u %-4s\n", file.size, file.name); // 能到这里就是文件,打印文件的大小以及文件名
} while (!_findnext(handle, &file)); //返回0则遍历完
//关闭文件句柄
_findclose(handle);
}
int main(int argc, char* argv[]) {
//递归遍历文件夹和文件夹中所有的文件
printf("输入全路径的路径名:");
getline(cin, path, '\n');
DfsFolder();
return 0;
}