Alhazred
11-06-2005, 09:43
Devo gestire un flusso i/o su un file, il codice che per ora ho scritto è questo:
#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...");
}
}
Con questo codice riesco ad aprire il file.
Come uso l'api
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
);
per leggere un carattere alla volta dal file in questione e madarlo in output su video sempre un carattere alla volta?
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 :confused:
#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...");
}
}
Con questo codice riesco ad aprire il file.
Come uso l'api
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
);
per leggere un carattere alla volta dal file in questione e madarlo in output su video sempre un carattere alla volta?
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 :confused: