ReadFile [Résolu]

Messages postés
97
Date d'inscription
dimanche 6 juillet 2003
Dernière intervention
20 janvier 2008
- - Dernière réponse : BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
- 11 nov. 2005 à 14:22
Bonjour,



J'arrive à lire des fichiers textes avec ReadFile(...), ou meme des .cpp



mais les fichiers avec des caracteres bizzares (mp3, exe, ... ) ne sont pas lus correctement,



c'est pour les transmettre par reseau( la aussi ça marche pour les txt).



Il n'y a pas une histoire d'ouverture en mode binaire ? Comment faire ?



Merci,



Melkior le necrarque
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
3
Merci
Je fais le cas de lecture complète du fichier:

HANDLE hFile;
char dataFile[TaillePak];
DWORD len;


ListeDl[i].currentNbPak = 0;
hFile = CreateFile(ListeDl[i].chemin, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL , NULL);


if(hFile == INVALID_HANDLE_VALUE) return;


fromFL:
len = 0; // COMBIEN REELLEMENT LU
ReadFile(hFile, dataFile, TaillePak, &len, NULL);
if(!len) goto outFL; // FIN DE FICHIER
send(sockfichierE, dataFile, len, NULL); // len OCTETS A ENVOYER
ListeDl[i].currentNbPak++;
if(len >= TaillePak) goto fromFL; // POSSIBLE ENCORE OCTETS A LIRE
outFL:
CloseHandle(hFile);

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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
3
Merci
Gaffe aussi au FILE_SHARE_WRITE, si un autre thread écrit en même temps, tu pourrais avoir des surprises.

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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de BruNews
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Dernière intervention
11 janvier 2009
0
Merci
Oui c'est ça il faut ouvrir en mode binaire.

Tu peux le faire si tu veux avec :



#define TAILLEBUFFER = 1024

char Chaine;

int Taille;



FILE * Fichier = fopen(NomDuFichier, "rb");



while(Taille = fread(&Chaine, 1, TAILLEBUFFER, Fichier))

{

...

}

fclose(Fichier);



YOYO, @+.
YOYO
Commenter la réponse de yoyo269
Messages postés
97
Date d'inscription
dimanche 6 juillet 2003
Dernière intervention
20 janvier 2008
0
Merci
Oui j'avais vu cet exemple la sur le forum ou dans les sources, mais je ne peux pas garder les fonctions de l'API win32 ?


merci Yoyo,


Melkior le necrarque.
Commenter la réponse de melkiorlenecrarque
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
API ne connait QUE le mode binaire donc le prob ne vient pas de là, il n'y a que les libs d'interprétation qui ont des modes.
C'est ta manière de lire le buffer que ReadFile a rempli qui doit merder, faudrait que tu montres.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
97
Date d'inscription
dimanche 6 juillet 2003
Dernière intervention
20 janvier 2008
0
Merci
ok:

HANDLE hFile = CreateFile(ListeDl[i].chemin, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL , NULL);

char dataFile[TaillePak];
DWORD verif;


ListeDl[i].currentNbPak = 0;
DWORD currPos = 0;


for(;;)
{
ZeroMemory(dataFile, TaillePak);
SetFilePointer(hFile, currPos, 0, FILE_BEGIN);
//currPos = SetFilePointer(hFile, 0, 0, FILE_CURRENT);
currPos = currPos + TaillePak;
BOOL err = ReadFile(hFile, dataFile, TaillePak, &verif, NULL);
send(sockfichierE, dataFile, TaillePak, NULL);
ListeDl[i].currentNbPak++;
if( ListeDl[i].len < currPos )
break;
}


CloseHandle(hFile);
Commenter la réponse de melkiorlenecrarque

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.