ReadFile [Résolu]

melkiorlenecrarque 97 Messages postés dimanche 6 juillet 2003Date d'inscription 20 janvier 2008 Dernière intervention - 11 nov. 2005 à 13:29 - Dernière réponse : BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention
- 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
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 11 nov. 2005 à 14:05
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++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 85 internautes ce mois-ci

Commenter la réponse de BruNews
Meilleure réponse
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 11 nov. 2005 à 14:22
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++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 85 internautes ce mois-ci

Commenter la réponse de BruNews
yoyo269 1403 Messages postés lundi 23 février 2004Date d'inscription 11 janvier 2009 Dernière intervention - 11 nov. 2005 à 13:46
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
melkiorlenecrarque 97 Messages postés dimanche 6 juillet 2003Date d'inscription 20 janvier 2008 Dernière intervention - 11 nov. 2005 à 13:48
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
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 11 nov. 2005 à 13:48
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
melkiorlenecrarque 97 Messages postés dimanche 6 juillet 2003Date d'inscription 20 janvier 2008 Dernière intervention - 11 nov. 2005 à 13:52
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.