linux下tree命令的简易实现
版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://vearne.cc
#include <iostream>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
using namespace std;
int is_regular_file(char * a){
if(*a=='.'){
return 0;
}else{
return 1;
}
}
char* append(const char * a,const char *b){
char* buffer = new char[256];
strcpy(buffer,a);
strcat(buffer,"/");
strcat(buffer,b);
return buffer;
}
void tree(char* argv,int level){
DIR* dirptr;
struct stat buf;
stat(argv,&buf);
if(!S_ISDIR(buf.st_mode)){
return;
}
//open file
if((dirptr = opendir(argv))!=NULL){
struct dirent* entry;
while(entry=readdir(dirptr)){
if(!is_regular_file(entry->d_name)){
continue;
}
for(int i=0;i<level;i++){
printf("\t");
}
printf("|");
printf("--");
printf("%s\n",entry->d_name);
tree(append(argv,entry->d_name),level+1);
}
//close file
closedir(dirptr);
}
}
int main(int argc,char* argv[]){
tree(argv[1],0);
}
后记
这是我2012年的文章,原来发表在ITeye,现在一并迁移过来