Ich erstelle einen Code in C, um alle Dateinamen in einem Verzeichnis zu finden, dieser Code ist rekursiv. Wenn er also andere Verzeichnisse findet, werden die anderen Verzeichnisse überprüft. Die Suche im Verzeichnis und die Suche nach Dateien funktioniert gut, weil ich auf dem Bildschirm ausgedruckt habe, was das Programm gelesen hat, und ich erkannte, dass alle Dateinamen gefunden werden und kein Dateiname wiederholt wird. Das Problem, das ich habe, ist, dass ich in einem Array von Zeichenfolgen den gefundenen Dateinamen speichere, und wenn Sie alle Dateien finden, werde ich im Wesentlichen die Anordnung der Zeichenfolgen mit allen Dateinamen haben, aber wenn ich auf dem Bildschirm das gedruckt habe Anordnung gibt es nicht alle Dateien darin, aber ein paar wiederholte Dateinamen. Das ultimative Ziel dieses Programms ist nicht alle Dateinamen auf dem Bildschirm drucken, der Zweck ist es, in der Anordnung alle Dateinamen zu speichern. Ich kann den Fehler nicht sehen, wenn jemand mir etwas sagen kann, dass ich falsch mache, werde ich sei dankbar.In C wie kann ich in einem Verzeichnis alle Dateinamen finden und sie in einem Array von Zeichenketten speichern?
void findfiles(char *root,char *p[],int *tam){
DIR * dir;
struct dirent *entrada;
struct stat stt;
dir = opendir(root);
char *aux;
char nombre[BUFFER_TAM];
char buf[30];
if (dir == NULL) {
printf("hola4\n");
return;
}
while ((entrada = readdir(dir)) != NULL) {
if (strcmp(entrada->d_name,".")==0 || strcmp(entrada->d_name,"..")==0);
else {
if (entrada->d_type == DT_DIR){
strcpy(nombre,root);
strcat(nombre,"/");
strcat(nombre,entrada->d_name);
findfiles(nombre,p,tam);
}
else {
strcpy(nombre,root);
strcat(nombre,"/");
strcat(nombre,entrada->d_name);
p[*tam]=malloc(strlen(nombre)+1);
p[*tam]=nombre;
*tam = *tam +1;
}
}
}
}
void main(){
char *archivos[BUFFER_TAM];
char root[BUFFER_TAM]="/home/jesusmolina/Documentos";
int i=0,tam=0;
findfiles(root,archivos,&tam);
for (i;i<tam;i++)
printf("%s\n",archivos[i]);
}
Für den Anfang der 'loszuwerden ''' nach Ihrer ', wenn ... "..") == 0);' (Sie sollten Compiler-Warnungen/Fehler werden in Bezug auf Empfang unübertroffenes 'else') –
Hier ist ein Tipp für Sie: Ihre Frage ist eine gute Frage, aber der Titel enthält nicht die eigentliche Frage, die Sie haben, sondern eine andere, die Sie bereits beantwortet haben und die den meisten Menschen sehr alt aussieht. Sie werden mehr Hilfe mit einem besser formulierten Titel bekommen. –