Corrigez mon code? Comment récupérer la taille d'un fichier?

cs_supergrey Messages postés 475 Date d'inscription vendredi 27 juin 2003 Statut Membre Dernière intervention 20 septembre 2010 - 28 oct. 2005 à 13:17
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 28 oct. 2005 à 14:22
Bonjour j'utilise pour l'instant la fonction suivante pour récupérer la taille d'un fichier:

DWORD TailleFichier(char* str_NomFichier)
{
HANDLE hFile;
//ouverture du fichier
hFile = CreateFile(str_NomFichier ,
GENERIC_READ ,
0 , NULL , OPEN_ALWAYS ,
FILE_ATTRIBUTE_NORMAL , NULL );

DWORD Taille = GetFileSize(hFile,NULL); //mesure la taille du fichier


CloseHandle( hFile ); //fermeture du fichier

return Taille;
}

Le probleme c'est qu'elle a tendance a retourner une taille nulle. Je pensais que le fichier était déja ouvert en ecriture mais ce n'est pas ca est-ce que mon code est mauvais? Est-ce qu'il y a une meilleur methode ?
Merci

2 réponses

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
28 oct. 2005 à 14:20
Assure toi que le fichier existe bien, car avec le flag OPEN_ALWAYS, si le fichier n'existe pas, il sera créé, avec une taille nulle donc.
Tu n'as qu'a remplacer OPEN_ALWAYS par OPEN_EXISTING, et tester apres CreateFile() si le handle renvoyé est correct. (if (INVALID_HANDLE_VALUE == hFile) return -1; par exemple).

+2(p - n)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 oct. 2005 à 14:22
DWORD TailleFichier(char* str_NomFichier)
{
HANDLE hFile;
DWORD Taille;
//ouverture du fichier
hFile = CreateFile(str_NomFichier, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
if(hFile == INVALID_HANDLE_VALUE) return 0;
Taille = GetFileSize(hFile,NULL);
CloseHandle(hFile); //fermeture du fichier
return Taille;
}

Faudrait prendre l'habitude de calculer sur 64 bits, nous sommes fin 2005 et les fichiers > 4 Go deviennent monnaie courante.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Rejoignez-nous