J'essaie de créer une fonction en C qui scanne tout mon chemin C: \ Temp (Windows) pour rechercher un fichier que je passe (par exemple, test.txt) et chaque fois qu'il trouve un retour à l'autre. une autre fonction pour écrire quelque chose au bas de ce fichier. J'ai réussi à effectuer la fonction qui écrit au fichier mais que vous ne pouvez pas déterminer comment faire cela analyse le dossier et transmettre l'adresse du fichier trouvé. P>
3 Réponses :
#include <unistd.h> #include <stdio.h> #include <dirent.h> #include <string.h> #include <sys/stat.h> #include <stdlib.h> void printdir(char *dir, int depth) { DIR *dp; struct dirent *entry; struct stat statbuf; if((dp = opendir(dir)) == NULL) { fprintf(stderr,"cannot open directory: %s\n", dir); return; } chdir(dir); while((entry = readdir(dp)) != NULL) { lstat(entry->d_name,&statbuf); if(S_ISDIR(statbuf.st_mode)) { /* Found a directory, but ignore . and .. */ if(strcmp(".",entry->d_name) == 0 || strcmp("..",entry->d_name) == 0) continue; printf("%*s%s/\n",depth,"",entry->d_name); /* Recurse at a new indent level */ printdir(entry->d_name,depth+4); } else printf("%*s%s\n",depth,"",entry->d_name); } chdir(".."); closedir(dp); } int main() { printf("Directory scan of /home:\n"); printdir("/home",0); printf("done.\n"); exit(0); }
... mais où j'insère mon chemin de balayage de la fenêtre comme "C: \ Tools", puis le fichier Txt que je recherche et modifie comme "test.txt" et que la chaîne que je blanche à la fin de celui-ci comme " Du texte"?
Passer le nom du répertoire dans la fonction printDir ("C: / xxx / xx /", 0); Modifiez le code selon vos besoins, ce code listera tous les éléments sous un répertoire donné.
J'ai modifier comme ceci pour rechercher des fichiers nommés filtre.txt dans le journal du répertoire et écrire "Terminé" à la fin du fichier ... mais ne fonctionne pas int Main () {imprimante ("Numérisation du répertoire de / home: \ n" ); printDir ("c: /log/filter.txt", 0); printf ("fait. \ n"); sortie (0);}
int Main () {Printf ("Annuaire Scan of / Home: \ N"); printDir ("c: /log/filter.txt", 0); printf ("fait. \ n"); sortie (0); }
Notez que, tandis que CHDIR (DIR); code> est OK, l'extrémité
CHDIR ("."); Code> n'est pas une solution générale au problème de "Changer le répertoire" Tu viens de'. Cela ne fonctionne que lorsque le répertoire nommé est un sous-répertoire immédiat de l'annuaire actuel, je pense. Sur les systèmes POSIX, vous pouvez utiliser
fchDir () code> < / a> Pour modifier le répertoire en toute sécurité:
int CWD = Ouvrir (".", O_RDONLY); CODE> Ouvre le répertoire actuel avant de faire l'initial
CHDIR () code>, puis > FCHDIR (CWD) CODE> Retourner à ce répertoire - suivi de
Fermer (CWD) CODE> Bien sûr.
Utilisez FindFirstFile une fonction>. Voici un bien Exemple de cette fonction en utilisant. p>
#include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/dir.h> #include<dirent.h> #include<fcntl.h> #include<unistd.h> #include<string.h> void searchInDirectory(char *dirname){ DIR *dir; struct dirent *dirp; dir=opendir(dirname); chdir(dirname); while((dirp=readdir(dir))!=NULL){ if(dirp->d_type==4){ if(strcmp(dirp->d_name, ".")==0 || strcmp(dirp->d_name, "..")==0){ continue; } printf("%s %s\n", "FOLDER", dirp->d_name); searchInDirectory(dirp->d_name); } else{ printf("%s %s\n", "FILE", dirp->d_name); } } chdir(".."); closedir(dir); } int main(){ searchInDirectory("."); return 0; }
Les messages du code seulement sont généralement fronçés, car ils ne fournissent aucune explication au questionneur comment votre réponse diffère de l'une des autres réponses données ou des fonctionnalités supplémentaires que votre code fournit que d'autres ne le font pas. Rappelez-vous, lorsque vous répondez à une question, vous entrez dans le rôle de «enseignant». Passer un code non motif à éduquer (même s'il est correct). Si l'utilisateur avait des problèmes avec Opendir / ReadDir Code> Il est peu probable que cela permet de résoudre leurs problèmes en fournissant simplement ce qu'ils ont à nouveau. Vous êtes un nouvel utilisateur, donc pas d'asseye pour le faire cette fois - mais ajoutez une explication ici sur.
Je suppose que l'autre réponse souffre des mêmes lacunes - ne l'utilisez pas comme exemple de bonne réponse.
Si vous souhaitez également vérifier les extensions de fichiers, Scandir () peut être utile Stackoverflow.com/Questtions/22886290/...