Lire les 6 dernier octets d'un fichier?

Résolu
cs_supergrey Messages postés 475 Date d'inscription vendredi 27 juin 2003 Statut Membre Dernière intervention 20 septembre 2010 - 10 juin 2006 à 23:23
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 11 juin 2006 à 14:38
Bonjour, je souhaite lire les 6 derniers octets d'un fichier j'ai écris le code suivant mais ca n'a pas l'air de marché car byteread est à zéro:

 char IDWEB[6];
 DWORD byteread=0;


 DWORD taille = 0;
 HANDLE hfl = CreateFile("temp", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
 SetFilePointer(hfl,5,NULL,FILE_END);
 ReadFile(hfl,IDWEB,6,&byteread,NULL);
 CloseHandle(hfl);

Bon je ne suis pas sur s'il faut mettre 5 ou 6 pour setfilepointer mais je ne pense pas que le probleme vienne de la.


 


Merci

5 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
11 juin 2006 à 11:38
Pour lire 6 octets, il suffit d'en réserver 6 (le zéro terminal n'est pas obligatoire).
Je pense qu'il faut mettre -6 dans SetFilePointer, car 0 fin, -1 1 avant la fin, donc -6 = 6 avant la fin
Regarde si ton hfl est bien valide, peut être que CreateFile a échoué

Ca ne semble pas être FILE_FLAG_SEQUENTIAL_SCAN qui pose problème, cependant tu devrais l'enlever, car il est déconseillé quand tu fais des déplacement aléatoires dans le fichier (If an application moves the file pointer for random access, optimum caching may not occur. However, correct operation is still guaranteed.)
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
11 juin 2006 à 14:38
Salut vecchio. Pour SetFilePointer, c'est exactement ce que je disais. Ensuite si je reserve une place pour le 0 terminal c'est que j'ai tester ce que j'ai écrit et sans 0 terminal, toute sorte de caractère s'écrive après les 6 derniers. D'accord si c'est seulement pour "traiter" les 6 caractères indépendament mais si il veut affichers la chaine avec printf ou autre, c'est là que le problème apparaitra. Ce n'est qu'une précotion de ma part.
___________________________________________
Les plus grands esprits trouvent toujours une solution
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
11 juin 2006 à 00:09
char IDWEB[7];
 DWORD byteread0;  DWORD taille 0;
 HANDLE hfl = CreateFile("temp", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
 SetFilePointer(hfl,-6,NULL,FILE_END);
 ReadFile(hfl,IDWEB,6,&byteread,NULL);
 CloseHandle(hfl);
IDWEB[6] = 0;

essais ça

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
11 juin 2006 à 00:19
Et si tu n'est pas sûr de la taille, je te conseillerais de tester la taille avant d'éfectuer une lecture:

if(GetFileSize(hfl, 0) < 6)
{
        MessageBox(0, "Taille du fichier insufisante", "Problème", MB_ICONHAND);
        CloseHandle(hfl);
        return 0;
}

___________________________________________
Les plus grands esprits trouvent toujours une solution
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_supergrey Messages postés 475 Date d'inscription vendredi 27 juin 2003 Statut Membre Dernière intervention 20 septembre 2010
11 juin 2006 à 07:54
Ok, merci. Par contre pourquoi pas faire:
char IDWEB[6];
 DWORD byteread=0;  DWORD taille = 0;
 HANDLE hfl = CreateFile("temp", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
 SetFilePointer(hfl,-6,NULL,FILE_END);
 ReadFile(hfl,IDWEB,6,&byteread,NULL);
 CloseHandle(hfl);
0
Rejoignez-nous