readFile()

readFile() - C++ - Programmation

Marsh Posté le 02-06-2005 à 21:16:14    

void base::WriteRealDataFile(char *pf)
{
    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;
 :??: la saisie est juste ,par contre les valeurs que je récupére après la lecture sont différentes de celles saisie.
 

Reply

Marsh Posté le 02-06-2005 à 21:16:14   

Reply

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.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

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

Reply

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.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 03-06-2005 à 00:21:43    

:ange: 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; }

Reply

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.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 03-06-2005 à 13:46:01    

:pt1cable: 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;
}
//=====================================
 :bounce: 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
 :hello:  

  • Si j'ain bien compris ta remarque la balise [cpp]je dois la mettre dans le titre. (je suis débutante).donc ok pour la remarque.
  • La pour l'ecriture d'un flot c'est difficile, j'ai un mélange de float et int dans l'implémentation, je commence par le teste de chacun puis je vais voir comme procéder pour la suite.

:jap: Merci beaucoup HelloWorld

Reply

Marsh Posté le 03-06-2005 à 15:39:14    

les balises cpp c'est pour formatter ton code
 
code sans cpp
 

Code :
  1. code entouré de [ cpp ] [/ cpp ]


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 03-06-2005 à 15:56:23    

Code :
  1. voilà c'est réussi..!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed