1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| #include <stdio.h>
#include <stdlib.h>
#include <windows.h>
/* But : Tester l'existence d'un fichier donné dans un répertoire. */
int CHERCHE(char chaine[]);
char NOMA[] = "ROUSSEAU";
int EXIST = -1;
int main()
{
CHERCHE(NOMA);
printf("\nEXIST = %d", EXIST);
}
int CHERCHE(char chaine[])
{
char SEARCH_PATH[] = "C:\\Sauvegarde_B\\Fichiers_txt\\*.txt";
char A[20]; /* buffer */
char *NOMA_CHECK = NULL;
int EXIST = -1;
int a;
int x;
WIN32_FIND_DATA File;
HANDLE hSearch;
hSearch = FindFirstFile(SEARCH_PATH, &File);
if (hSearch != INVALID_HANDLE_VALUE)
{
do
{
strcpy(A, File.cFileName);
for (a = 0; a < sizeof((A)-1); a++)
{
while (A[a] != '.') /* Je parse le contenu de File.cFileName afin d'obtenir le nom du fichier sans son extension */
{
fputc(A[a], stdout);
a++;
}
a += 1; /* J'augmente a de 1 afin de réserver un octet pour le caractère \0 null de fin de chaîne */
printf("\n%d", a); /* Ici a représente en réalité la taille de la chaîne qui doit être stockée dans NOMA_CHECK en octets de chaque chaîne de caractères */
if (NULL == (NOMA_CHECK = malloc((sizeof(char))*a)))
{
printf("\Erreur d'allocation de mémoire.");
}
else
{
fgets(NOMA_CHECK, sizeof(NOMA_CHECK), stdout); /* On récupère le contenu de stdout et on le stocke dans NOMA_CHECK : normalement, NOMA_CHECK fait pil poile la taille de la chaîne qu'il contient, du moins c'est ce que je cherche à faire et je n'y arrive pas, ça ne marche pas. */
if ((x = strcmp(NOMA_CHECK, chaine)) == NULL) /* Comparaison des deux chaînes */
{
EXIST = 1; /* Si les chaînes sont identiques, EXIST vaut 1 et on sort de la fonction car le fichier a été trouvé */
return(EXIST);
}
printf("\n%d", sizeof(NOMA_CHECK)); /* Je vérifie si la taille du tableau correspond bien à celle allouée par malloc() : et c'est la le problème, ça ne corresond pas, ça me renvoie toujours 4 et je ne comprends pas */
printf("\n");
}
fflush(stdout);
fflush(stdin);
free(NOMA_CHECK);
free(A);
/* On vide de tout caractère les différents flots et tableaux utilisés après avoir travailler sur chaque fichier */
}
} while (FindNextFile(hSearch, &File));
FindClose(hSearch);
}
EXIST = 0; /* Aucun fichier portant le nom de la chaîne recherchée n'a été trouvé : EXIST renvoie 0 */
return(EXIST);
} |
Partager