|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 1767
|
[C] Gestione file
Devo gestire un flusso i/o su un file, il codice che per ora ho scritto è questo:
Codice:
#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <conio.h>
#define Errore_(x) {puts(x);getch();ExitProcess(1);}
int main(int argc, char *argv[]) {
HANDLE bookf; //handle al file contenente le informazioni
bookf = CreateFile("pippo.txt",
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
CREATE_NEW,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(bookf == INVALID_HANDLE_VALUE){
bookf = CreateFile("pippo.txt",
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(bookf == INVALID_HANDLE_VALUE)
Errore_("Impossibile accedere al file pippo!\
\n\nPremere un tasto per terminare...");
}
}
Come uso l'api Codice:
BOOL ReadFile( HANDLE hFile, // handle of file to read LPVOID lpBuffer, // pointer to buffer that receives data DWORD nNumberOfBytesToRead, // number of bytes to read LPDWORD lpNumberOfBytesRead, // pointer to number of bytes read LPOVERLAPPED lpOverlapped // pointer to structure for data ); Il file conterrà una cosa del genere: a4c5e3f8g0b3h6... quindi la sequenza di operazioni dovrebbe essere: - leggi il primo carattere (sarà una lettera), mettilo in una variabile e stampalo a video (andrà bene anche printf() per questo) - leggi il secondo carattere (sarà un numero), mettilo in una variabile e stampalo a video - leggi il terzo carattere (di nuovo una lettera), mettilo in una variabile (la stessa della prima) e stampalo a video... - e così via fino alla fine del file. Inoltre non capisco una cosa, non dovrei poter usare "CREATE_NEW|OPEN_EXISTING" con un unica chiamata a CreateFile(), invece di usare 2 volte CreateFile() una volta col primo e una volta col secondo in caso di fallimento? Ho provato, ma non funziona |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2002
Città: vinci-spicchio
Messaggi: 530
|
ma perchè invece di usare la windows.h con la CreateFile non usi la iostream.h con i relativi buffer di lettura e scrittura?
__________________
Intel Pentium DualCore E2140 1,60 GHz , Asus P5LD2 R2.0,Sapphire x600xt 128Mb,hauppauge winTV,2x256Mb Ddr2 Vitesta 533Mhz,western digital caviar 160gb, seagate 20gb 5400giri, maxtor 40gb 7200giri, dvd+-rw gigabyte(BTC) 4x,Samsung writemaster dvd duallayer 18x , edimax wireless<-->router D-link G604T. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 1767
|
Perché sto risolvendo un esercizio e devo usare le API di Windows.
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Be', non sono molto esperto delle API di Windows, ma ci provo:
Codice:
char * putnatore;
while (ReadFile(bookf, puntatore, 1, NULL, NULL))
{
printf("%s", puntatore);
};
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 1767
|
Ho appena risolto così:
Codice:
char buf;
DWORD size;
while(size>0) //legge il file finché non finisce
{
if(ReadFile(bookf,&buf,1,&size,NULL)==0)
Errore_("Impossibile leggere dal file pippo!\
\n\nPremere un tasto per terminare...");
if(size>0)
printf("%c",buf);
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:09.



















