Newsgroup: it.comp.programmare.win32
Titolo: ReadFile

 HANDLE hFile;
 DWORD wrote;
 LPVOID lpPunt;
 LPDWORD lpNumberOfBytesRead;
hFile =
CreateFile("punti.txt",GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_N
ORMAL,NULL);
If(hFile!=0)
    ReadFile(hFile,lpPunt,10,lpNumberOfBytesRead,NULL);
dove sbaglio??? mi potreste fare un esempio corretto di una ReadFile, e anke
di WriteFile già ke ci siamo...
i byte letti vengono puntati da lpPunt??
Grazie!!!
K

     ReadFile(hFile,lpPunt,10,lpNumberOfBytesRead,NULL);
lpPunt e' dichiarato ma non inizializzato. Bisogna o che lo allochi
staticamente (dicharando, che so io, char lpPunt[10] al posto di LPVOID) - o
dinamicamente, con una malloc.
Ciao,
Zello


grazie,fatto, xo' ho ancora lo stesso errore!!! "ACCES VIOLATION"!!! :-( :-(

 ha scritto nel messaggio
news:cKmk7.12026$MO.4...@news.infostrada.it...

ma hai allocato la memoria per lpPunt e lpNumberOfBytesRead prima di usarli?
ciao :: xaero


no infatti,rifacciamo:
 HANDLE hFile;
 char string[4096];
 DWORD wrote;
 LPSTR str;
 LPVOID lpoint;
 DWORD lpNumberOfBytesRead;
  hFile =
CreateFile("punti.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_
ATTRIBUTE_NORMAL,NULL);
  ReadFile(hFile,&string,sizeof string,NULL,NULL);
ora ho allocato string, e ho messo lpNumberOfBytesRead a NULL (non ho ben
capito se si può) xo' l'errore è sempre lo stesso!!!!
:-(
XKé????
può essere un problema di sicurezza di win2000 (si lo so ke sarà una
cavolata,ma io le dico tutte!!!)

>  ReadFile(hFile,&string,sizeof string,NULL,NULL);
string e' gia' un indirizzo... forse non dovresti usare la &


prova
ReadFile(hFile,string,4096,& lpNumberOfBytesRead,NULL);

 cavolata,ma io le dico tutte!!!)
No, i problemi di sicurezza danno errore (ReadFile ritorna 0, GetLastError
ritorna Access Denied), ma sicuramente non un GPF.
Ciao,
Zello


ma anke togliendo la & (infatti l'avevo fatto senza, poi provando varie cose
l'ho messa e nn l'ho + tolta..) l'errore è lo stesso, nn cambia!!!
arrivati a quel punto esce dicendomi: Unhandled exception in threads.exe
(KERNEL32.DLL): 0xC00000005: Access Violation.
:-( vabbè, non voglio disturbarvi altro, farò senza la ReadFile...

ok ok, ce l'ho fatta!!! EVVAIII!!! ora xo' avrei bisogno di un consiglio...
devo praticamente leggere dei numeri contenuti in questo file e l'unica cosa
ke mi è venuta in mente è quella di scriverli nel file con un separatore
(es: 8;34;453) e poi quando devo leggerli fare una strcat dei numeri fino al
separatore e succesivamente trasformare la stringa ottenuta in int, non c'è
qualke metodo migliore????


un algoritmo del genere fa schifo?????
HANDLE hFile;
 char string[1024];
 char sNomi[10][10];
 char sPunti[10][3];
 char tocca=1;
 DWORD lpNumberOfBytesRead;
 char i=0,e=0;
  hFile =
CreateFile("punti.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_
ATTRIBUTE_NORMAL,NULL);
  ReadFile(hFile,string,sizeof string,&lpNumberOfBytesRead,NULL);
  for(short a=0;a<1024;a++)
  {
       if(string[a]==';')
       {
            i=0;
            tocca = -tocca;
            a++;
       }
       if(tocca>0)
       {
            sNomi[e][i]=string[a];
            i++;
       }
       else
       {
            sPunti[e][i]=string[a];
            i++;
            if(string[a+1]=='.')
            {
                 tocca=-tocca;
                 a++;
                 e++;
                 i=0;
           }
      }
 }

 ReadFile(hFile,buffer,10,&NumberOfBytesRead,NULL);
--
Bye! Lorenzo Lutti
http://antani.virtualave.net/

 wrote in message
nhHk7.19098$MO.6...@news.infostrada.it...

se gli int li scrivi con WriteFile in binario (senza convertirli prima in
stringa) puoi fare così per leggerli (senza bisogno di separatori):
int *p=(int*) string; //string punta all'inizio del file letto con ReadFile
int num=*p; //così num contiene il 1° int salvato
se voglio il numero successivo faccio p++ e continuo (o faccio un bel ciclo
per tutto il file)
in questo modo non servono separatori perché lo spazio occupato da ogni int
è sempre uguale
Pela