Chercher un fichier (WinCE)

Résolu/Fermé
emmy_2019 Messages postés 59 Date d'inscription mardi 23 avril 2019 Statut Membre Dernière intervention 16 septembre 2019 - Modifié le 22 mai 2019 à 09:55
emmy_2019 Messages postés 59 Date d'inscription mardi 23 avril 2019 Statut Membre Dernière intervention 16 septembre 2019 - 29 mai 2019 à 11:14
Bonjour,

J'ai un fichier qui change le nom à chaque mise à jour , par exemple:
PARAMZONE_05.csv après PARAMZONE_06.csv
Le chemin est : /HP/API/ PARAMZONE_06.csv
Je chercher comment sur windows peux-je chercher un fichier qui commence par PARAMZONE et récupérer le nom complet du fichier dans mon cas c'est "PARAMZONE_06.csv" car je devrais le parcourir.

Avez-vous une idée svp?

Merci

Configuration: Windows / Chrome 74.0.3729.157
A voir également:

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
22 mai 2019 à 12:20
Salut emmy_2019,

Tu peux utiliser l'API Windows et leur fonction
FindFirstFile()
:

https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-findfirstfilea


Dal
1
emmy_2019 Messages postés 59 Date d'inscription mardi 23 avril 2019 Statut Membre Dernière intervention 16 septembre 2019
Modifié le 22 mai 2019 à 13:57
FindFirstFile prend comme paramètre le nom complet de fichier alors dans mon cas j'ai seulement une partie du nom et à partir de cette partie je cherche le nom complet du fichier
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
22 mai 2019 à 14:06
Tu n'a pas bien lu la (première ligne de la) documentation de Windows sur cette fonction (ni celles qui suivent) :

FindFirstFileA function

Searches a directory for a file or subdirectory with a name that matches a specific name (or partial name if wildcards are used).

To specify additional attributes to use in a search, use the FindFirstFileEx function.

To perform this operation as a transacted operation, use the FindFirstFileTransacted function.
Syntax
C++

HANDLE FindFirstFileA(
  LPCSTR             lpFileName,
  LPWIN32_FIND_DATAA lpFindFileData
);


Parameters

lpFileName

The directory or path, and the file name. The file name can include wildcard characters, for example, an asterisk (*) or a question mark (?).
0
emmy_2019 Messages postés 59 Date d'inscription mardi 23 avril 2019 Statut Membre Dernière intervention 16 septembre 2019
24 mai 2019 à 14:42
Hello Dal
j'ai essayé ce bout de code:
har *pattern = "/HD/SPEC/ticketingmodule/PARAMZONE*";
    //struct _finddata_t fileinfo;
	WIN32_FIND_DATA fileinfo;
    char *File_Name=malloc(100);
	FindFirstFile(pattern, &fileinfo);
	printf("Find=%d",FindFirstFile(pattern, &fileinfo));
	memcpy(File_Name,fileinfo.cFileName,100);
	printf("File_Name=%s",File_Name);


MAIS Find=-1 et File_Name="n'importe quoi" malgré que mon fichier existe /HD/SPEC/ticketingmodule/PARAMZONE_01.csv
As-tu une idée stp ?
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 24 mai 2019 à 16:48
quelques remarque, qui, je l'espère, t'aideront

- tu appelles
FindFirstFile()
deux fois dans ce code
- utilise
GetLastError()
pour obtenir le code d'erreur
- pour dupliquer une chaîne C, tu devrais utiliser
strdup()
et libérer la mémoire une fois que cette chaîne n'est plus utile

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main(void) {
    char * pattern = "/HD/SPEC/ticketingmodule/PARAMZONE*";

    WIN32_FIND_DATA fileinfo;
    HANDLE hFind;
    
    char * file_name = NULL;
    
    hFind = FindFirstFile(pattern, &fileinfo);
    if (hFind == INVALID_HANDLE_VALUE) {
        /* obtenir le code d'erreur */
        DWORD error_id = GetLastError();
        printf("FindFirstFile failed: with error code %lu\n", error_id);
        return EXIT_FAILURE;
    }
    file_name = strdup(fileinfo.cFileName);
    printf("file_name = %s\n", file_name);
    
    /* lorsqu'on n'a plus besoin de file_name */
    free(file_name);

    return EXIT_SUCCESS;
}

Il se peut que DWORD sur ta plateforme ne soit pas un unsigned long. Dans ce cas, gcc va se plaindre lors de la compilation (si tu compiles avec les warnings
-Wall
) et t'indiquer le conflit de types (le type que tu fournis et le type attendu). Adapte alors le spécificateur de
printf()
pour afficher correctement le code.

La fonction FindFirstFile semble supportée par Windows CE depuis la version 1.0

J'ai trouvé ces liens pour Windows CE, pas facile à trouver d'ailleurs, car les moteurs de recherche apparemment n'indexent plus bien (voire pas, le code source html contenant carrément la balise
<meta name="ROBOTS" content="NOINDEX,FOLLOW" />
) ces contenus qui correspondent à un système Windows qui n'est plus maintenu, et les pages qui documentent l'API Windows "normale" n'indiquent pas la compatibilité avec les versions Windows CE :

https://docs.microsoft.com/en-us/previous-versions/aa914391(v%3dmsdn.10)
https://docs.microsoft.com/en-us/previous-versions/aa911366%28v%3dmsdn.10%29
https://docs.microsoft.com/en-us/previous-versions/aa914935%28v%3dmsdn.10%29
https://docs.microsoft.com/en-us/previous-versions/bb202810%28v%3dmsdn.10%29

cherche le code numérique retourné dans la liste des codes d'erreurs pour savoir pourquoi la fonction échoue
0
emmy_2019 Messages postés 59 Date d'inscription mardi 23 avril 2019 Statut Membre Dernière intervention 16 septembre 2019
Modifié le 27 mai 2019 à 09:33
Bonjour Dal,

Pour info,on travaille sur un WinCE 6.0.
J'ai eu cette erreur :
FindFirstFile failed: with error code 18

En regardant le lien que tu m'as donnée , ce code donne ERROR_NO_MORE_FILES . En fait, le fichier est bien existe ( J'ai testé par File_Name="/HD/SPEC/ticketingmodule/Data/PARAMZONE_01.csv"; et il trouve bien le fichier)
0