打印文件树
mac电脑在命令行输入命令加文件路径打印指定目录下的所有目录及文件
#include <stdio.h>
#include <dirent.h>
#include <string>
#include <string.h>
using namespace std;
/**
*jianghc
*/
void List(const char *path, int level) {
struct dirent *ent = NULL;
DIR *pDir;
pDir = opendir(path);
if (pDir == NULL) {
//被当作目录,但是执行opendir后发现又不是目录,比如软链接就会发生这样的情况。
return;
}
while (NULL != (ent = readdir(pDir))) {
char *c = ent->d_name;
if (c[0] == '.') {
continue;
}
if (level == 0 && ent->d_type == 8) {
printf("|--%s\n", ent->d_name);
} else if (level == 0 && ent->d_type != 8) {
if (strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0) {
continue;
}
//directory
std::string _path(path);
std::string _dirName(ent->d_name);
std::string fullDirPath = _path + "/" + _dirName;
for (int i = 0; i < level; i++) {
if (i == 0) {
printf("|----");
} else {
printf("--");
}
}
printf("|--%s/\n", ent->d_name);
List(fullDirPath.c_str(), level + 1);
} else if (ent->d_type == 8) {
//file
for (int i = 0; i < level; i++) {
if (i == 0) {
printf("|----");
} else {
printf("--");
}
}
printf("%s\n", ent->d_name);
} else {
if (strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0) {
continue;
}
//directory
std::string _path(path);
std::string _dirName(ent->d_name);
std::string fullDirPath = _path + "/" + _dirName;
for (int i = 0; i < level; i++) {
if (i == 0) {
printf("|----");
} else {
printf("--");
}
}
printf("%s/\n", ent->d_name);
List(fullDirPath.c_str(), level + 1);
}
}
}
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("%s", "错误,请在命令后面添加一个目录参数!(如:\"fileTree /usr\")");
return 0;
}
List(argv[1], 0);
return 0;
}
将生成的文件添加到环境变量中,到控制台执行该文件
fileTree pwd
输出如下: