私は仕事中の仕事のためにCプログラミングを学びたいと思っています。私は自分自身に小さなプロジェクトを設定しました。これはすべてのサブディレクトリを含むファイルツリーを読み込み、treeコマンドのような行を印刷
私が解決できなかった問題は、実際のツリーコマンドとしてすべてのディレクトリを印刷するときに行を作成する方法です。
、これが私のサンプルコードです:
enum { doSkip, isFile, isDir } testDir(char *path, char *name)
{
struct stat st_buf;
if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) {
return doSkip;
}
stat(path, &st_buf);
if (S_ISDIR(st_buf.st_mode))
return isDir;
return isFile;
}
void list(const char *path, int indentlevel)
{
DIR *dirp = opendir(path);
struct dirent *dentry;
char buf[1024];
if (!dirp) {
printf("%*sNo access\n",indentlevel,"");
return;
}
while ((dentry = readdir(dirp)) != NULL) {
sprintf(buf,"%s/%s", path, dentry->d_name);
switch (testDir(buf,dentry->d_name)) {
case doSkip:
/* do nothing */
break;
case isDir:
printf("%*s%s:\n",indentlevel,"",dentry->d_name);
list(buf,indentlevel+4);
break;
case isFile:
printf("%*s%s\n",indentlevel,"",dentry->d_name);
break;
}
}
closedir(dirp);
}
int main()
{
list(".", 0);
return 0;
}
私にいくつかのアイデアを与えてください!あなたが唯一の1つ上のレベルに行くため
インデントレベルのリストが必要です。複数のパラレルブランチが1つ以上のサブディレクトリに描画されています。 – tripleee
唯一の違いは、treeコマンドの出力がソートされていることです。だから、結果を並べ替えるには、単純に何らかのコンテナに入れて、並べ替えて印刷してください。それ以上の並べ替えがある場合は、私に知らせてください。 – Klaus
インデントレベルのリストを作成するにはどうすればよいですか? @tripleee – Hmmmmm