Renseugenement sur write file et readfile

Résolu
julienbornet
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009
- 27 mars 2006 à 23:18
julienbornet
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009
- 28 mars 2006 à 20:08
Bonjour a tous voila je cherche a savoir quelque chose. Voila, je doit realiser un rpogram ou j'enregistrer des donnes dans un fichier. Jusque la rein de bien nouveau. Bon n'etant pas trop habitue au API ni un pro de la programmation, j'utilisais les fonction fopen pour ouvrir mon fichier et fprintf pour ecrire dedans. Cependant dans le but d'uniformiser ma maniere de coder mais aussi et surtout d'ameliorrer la vitesse d'ecriture des ces donnes , j'ai decider de passer en API. J'tulisie donc CreateFile et WriteFile. Le probleme c'est qu'avant mes donnees enregistrer en txt etait visible dnas le notpad mais mainteant j'obtient des carre. Je suppose que cela veint de la maniere dont la fonction ecrit les donnees. Je voudrais donc savoir s'il existe une otpion de writefile qui permettent d'ecrire des donnes lisibles (sans passer par une editeur de texte maison avec readfile par exemple).

D'avance merci

PS: Pour ceux qui aurait des doutes sur mon codes et je les comprends le voici (ce n'est qu'un exemple)


#include <windows.h>


#include


using
namespace std;


int main ()


{



int t1[5] = {1,2,3,4,5};


HANDLE fichier;


HANDLE hFile;


DWORD octetsEcrits;


fichier = CreateFile("test.txt", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);



if( fichier == INVALID_HANDLE_VALUE)



return
false;



if (!WriteFile(fichier, t1 ,
sizeof(
int)*5,&octetsEcrits,NULL))


{



// erreur;


}


CloseHandle(fichier);



for (
int i = 0; i <= 4;i++)


{


cout << t1[i];


}


hFile = CreateFile("test.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);



if (hFile == INVALID_HANDLE_VALUE)



return
false;



int t2[5];


DWORD octetsLu;



if (!ReadFile(hFile,t2,
sizeof(
int)*5,&octetsLu,NULL))


{



// erreur;


}


CloseHandle(fichier);


cout << endl;



for (
int i = 0; i <= 4;i++)


{


cout << t1[i];


}


cin.ignore();



return 0;


}

5 réponses

BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
28 mars 2006 à 20:05
Quand on arrive sur de gros fichiers d'autres facteurs entre en compte, le taux de fragmentation du disque dur par exemple.

Dans tous les cas, on ne va jamais plus vite que par la ligne droite et comme toute autre fonction devra par force finir par appeler WriteFile (en mode protégé on ne touche pas aux périphs autrement que par les fonctions du systeme hote), il est clair que rien n'ira plus vite que l'appel direct de l'API.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
3
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
27 mars 2006 à 23:47
Quand on écrit directement les données elles ne sont pas lisibles (à moins d'être un processeur), mets les en forme ascii dans une chaine si tu y tiens mais c'est moins performant car besoin de conversion dans les 2 sens.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
julienbornet
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

28 mars 2006 à 17:05
Ok Brunews, je te remercie du renseignement. Je voulais aussi avoir un deuxieme renseugement, voila j'ai tourver un de tes programme qui compare la vitesse ne d'ecriture dans un fichier de la fonction sprintf et de l'API writefile() . Voiale dans ton programme tu fait le test en ecrivant 6000 fois la meme chaine de caracteres avec ces deux fonction et on peut ainisi comparer leure temps d'execution. Mais voila si on passe a 100000 voir meme 800000 ces deux fonctions devienne equivalente. Peut tu me confirmer ceci? Le gain de writefile ne se ferait il que sur les fichiers de taille modeste.

D'avance merci
0
julienbornet
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

28 mars 2006 à 17:20
pardon c 'est pas la fonction sprintf mais fwrite desole
0

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

Posez votre question
julienbornet
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

28 mars 2006 à 20:08
Merci pour tous ces renseignements, j'en prend bonne notes
0