単一の入力ディレクトリに含まれるすべてのファイルを読み取る関数があります。
その関数が「メイン」ディレクトリ内のファイルだけでなく、すべてのサブディレクトリに含まれるファイルも読み取れるようにしたかったのです。
そうするために、私はこのコードを書きました:
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
#include <stdio.h>
struct dirent *readdir(DIR *dirp);
char * percorso;
DIR *cartella;
struct dirent *elemento;
char * scrivi(char * a, char * b)
{
char *targetdir = malloc(2048);
strcpy(targetdir,a);
strcat(targetdir,"/");
strcat(targetdir,b);
printf("%s \n", targetdir);
return targetdir;
}
void scorriFolder(char* nome)
{
if ((cartella = opendir(nome)) == NULL)
perror("opendir() error");
else {
printf("contents of root: \n");
while ((elemento = readdir(cartella)) != NULL)
{
if(elemento->d_type == DT_DIR)
{
if(elemento->d_name != ".." || elemento->d_name != ".")
{
percorso = scrivi(nome, elemento->d_name);
scorriFolder(percorso);
}
}
else
{
printf(" %s\n", elemento->d_name);
}
}
closedir(cartella);
}
}
main(int argc, char * argv[]) {
scorriFolder(argv[1]);
}
しかし、次のように言ってコンパイルさえしません。
warning: incompatible implicit declaration of built-in function ‘malloc’
warning: incompatible implicit declaration of built-in function ‘strcpy’
warning: incompatible implicit declaration of built-in function ‘strcat’
私の知る限り、この問題はmalloc
,strcpy
およびstrcat
関数に渡される変数の形式が間違っていることが原因です。(型をelemento->d_name
持ち、型char
を持たないchar*
このコードを機能させるにはどうすればよいですか?
ありがとう。
編集
これは実用的なwhile
スニペットです:
while ((elemento = readdir(cartella)) != NULL)
{
if ( strcmp(elemento->d_name, ".") == 0)
{
continue;
}
if ( strcmp(elemento->d_name, "..") == 0)
{
continue;
}
if(elemento->d_type == DT_DIR)
{
{
percorso = scrivi(nome, elemento->d_name);
scorriFolder(percorso);
}
}
else
{
printf(" %s\n", elemento->d_name);
}
}
サブディレクトリをスキャンすると、プログラムがサブディレクトリから終了するときにパスが更新されないため、クラッシュします。私はそれを修正しようとしています。