readFile() - C++ - Programmation
Marsh Posté le 02-06-2005 à 22:43:50
Là tu lis sizeof( float ) octets, soit un seul float. Et puis faut te fier à dwRead pour savoir combien tu as lu.
Marsh Posté le 02-06-2005 à 23:05:01
je veux lire normalement foat by float c'ad je veux afficher tous simplement les float que j'ai saisi,je n'ai pas compris votre remarque à propos de dwRead,
merci
Marsh Posté le 02-06-2005 à 23:36:16
Là tu demandes à lire un seul float. Donc au maximum tu n'auras qu'un seul float de lu.
dwRead contient le nombre d'octet lus. C'est pas parce que tu demandes à lire XXX octets qu'il seront tous lus.
Marsh Posté le 03-06-2005 à 00:21:43
je comprend maintenant ce que vous dites,mais je ne sais tjs pas comment récupérer mes float écrite dans le fichier par la fonction
for(int l=0;l<DimBase;l++)
for(int j=0;j<des[l].DimVect;j++)
{WriteFile(hSrc,&(des[l].id), sizeof(float), &dwWritten, NULL);
cout<<des[l].vect[j].value<<endl; }
Marsh Posté le 03-06-2005 à 09:33:00
Indice : tu écris i x j valeur, et tu en lis une seule...
Au passage en terme de performances, ils erait préférable d'écrire plus de flot d'un coup.
Pour demander à lire 100 float d'un coup, ben multiplie simplement le sizeof( float ) par 100 dans ton ReadFile. Divise ensuite dwRead par sizeof( float ) pour savoir combien tu en as lu.
Pense à utiliser les balises [ cpp ] aussi pour ton code, merci.
Marsh Posté le 03-06-2005 à 13:46:01
voila j'ai changer mes deux fonctions de lecture et écriture:
void base::WriteRealDataFile(char *pf)
{
HANDLE hSrc;
DWORD dwRead=0, dwWritten=0;
hSrc = CreateFile(pf, GENERIC_WRITE, FILE_SHARE_WRITE,NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hSrc == INVALID_HANDLE_VALUE)
{cout << "Unable to open " <<endl;getch();exit(1);}
else{
for(int l=0;l<DimBase;l++)
{WriteFile(hSrc,&((des[l].id)), sizeof(int), &dwWritten, NULL);
cout<<des[l].id<<endl;
}
}
//=============================================================
void base::ReadRealDataFile(char *pf)
{
HANDLE hSrc;
DWORD dwRead=0;
int c;
hSrc = CreateFile(pf, GENERIC_READ,FILE_SHARE_READ, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);
{for (int i=0;i<10;i++)
{(ReadFile(hSrc,&c,sizeof(int), &dwRead, NULL));
cout<<"c= "<<c<<endl;
}
//=====================================
j'ai testé pour les 10 premiers int ,et j'ai bien récupérer mes entiers du début,je vais faire de meme pour les float
Merci beaucoup HelloWorld
Marsh Posté le 03-06-2005 à 15:39:14
les balises cpp c'est pour formatter ton code
code sans cpp
Code :
|
Marsh Posté le 02-06-2005 à 21:16:14
void base::WriteRealDataFile(char *pf)
la saisie est juste ,par contre les valeurs que je récupére après la lecture sont différentes de celles saisie.
{
HANDLE hSrc, hDest;
DWORD dwRead=0, dwWritten=0;
float g[1000];
boolean b;
hSrc = CreateFile(pf, GENERIC_WRITE, 0, NULL,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if (hSrc == INVALID_HANDLE_VALUE)
{cout << "Unable to open " <<endl;getch();exit(1);}
else{
for(int l=0;l<DimBase;l++)
for(int j=0;j<des[l].DimVect;j++)
{ WriteFile(hSrc,&(des[l].id), sizeof(float), &dwWritten, NULL);
cout<<des[l].vect[j].value<<endl;
}
}
CloseHandle(hSrc);
//====================lecture==============
hSrc = CreateFile(pf, GENERIC_READ,0,NULL,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
b=ReadFile(hSrc,g,sizeof(float), &dwRead, NULL);
CloseHandle(hSrc);
for(int p=0;p<100;p++)//j'affiche les 100 premeier char
cout <<g[p]<<endl;