Cでディレクトリとそのサブディレクトリ内のファイルを検索するにはどうすればよいですか? の使用は許可されておらず、使用する必要find
があります。opendir
readdir
stat
ls -ln
ファイルが実際に存在する場合、コマンドのようなことを実行したい。
ディレクトリをトラバースするには、opendir(3)、readdir(3)、およびclosedir(3)が必要です。
ファイルのタイプをチェックするために(それがディレクトリであるかどうか、そしてその中を再帰的に検索する必要があるかどうかを確認するために)、stat(2)が必要になります。
あなたはチェックしたくなるでしょう
(struct stat).st_mode & S_IFDIR
ファイルがディレクトリかどうかを確認します。詳細については、 <sys/stat.h>を参照してください。
C で小さなコードを書こうとすると、この検索アクティビティを簡単に実行できます。/home/Jack/ で abc.txt を検索し、ファイル ストリームを開き、ファイル パスをパラメーターとして渡す必要があるとします。このステートメントが実行されると、既存のファイルを開こうとします。ファイルが存在する場合、この API は 0 以外を返します。それ以外の場合は、-1 または 0 が返されます。
あなたはすでに基本的な答えを提供しました:opendir
// 。ディレクトリエントリを歩くときに、それぞれがファイルを参照しているかディレクトリを参照しているかを確認します。ディレクトリを参照するものは、同様に(通常は再帰的に)トラバースします。ファイルを参照している場合は、その名前を探しているファイルと比較して、見つけたかどうかを確認します。readdir
closedir
もう1つの小さな詳細:シンボリックリンクも確認する必要があります。シンボリックリンクは、(たとえば)親ディレクトリを参照できます。これにより、無限再帰が発生する可能性があります。シンボリックリンクを完全に無視するか、少なくともトラバースを開始したディレクトリのリストを保持し、シンボリックリンクにあるものがまだリストにない場合にのみ解決/トラバースすることができます。