Bonjour,

Je suis en train d'essayer coder une fonction qui puisse chercher un fichier dans un dossier donné en fonction de son nom, indiqué pour la recherche.

Par exemple, si dans un dossier, j'ai les 3 fichiers .txt suivants :

ROUSSEAU.txt
BAUDELAIRE.txt
HUGO.txt

Je voudrais que la fonction puisse me dire si ROUSSEAU.txt existe sans avoir recours à fopen().

Voilà où j'en suis :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
}
J'ai commenté au mieux le code pour que vous puissiez m'aider plus facilement.

En fait, je ne comprends pas pourquoi je n'arrive pas à allouer dynamiquement mon tableau NOMA_CHECK à chaque fois. Il vaut toujours 4 alors qu'il contient des chaînes de caractères qui peuvent aller de 3 lettres à plus de 20...

Soit il y a un souci dans mon code (je suis sur ce problème depuis plus de 5h), soit je n'ai pas compris le fonctionnement de l'allocation dynamique de mémoire et auquel cas je voudrais bien quelques explications.

Merci par avance !

Merillym.