Newsgroup: it.comp.lang.c
Titolo: Lettura da file

Devo leggere da un file "pippo.txt", uno per uno, una sequenza di caratteri,
per la precisione una lettera e un numero alternati senza spazi e poi
stamparli a video nella stessa sequenza.
Per farlo devo usare l'API ReadFile(HANDLE hfile, LPVOID lpBuffer,...), ma
non so come fare, mi date una mano?
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
   DWORD size;
 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.txt!\
                    \n\nPremere un tasto per terminare...");
   }
}
Inoltre ho un'altra domanda, non posso usare una sola CreateFile(...) con
CREATE_NEW|OPEN_EXISTING invece di usarne 2 separate? Ho provato, ma non
funziona. Se il file non esiste non viene creato ed ottengo un errore.
Grazie.

Questa è una funzione presa da un programma ke avevo fatto...praticamente 
stampa a video il contenuto del file "help.txt" ke è presente nella 
directory. Ovviamente devi sistemarlo un po per adattarlo a quello ke ti 
serve, ma credo ke riuscirai a cavartela tranquillamente...scusa se tho dato 
sto programma non funzionante ma non ho tempo per aggiustarlo!
Se ancora hai problemi contattami!
Ciao
(by Nudge)
//funzione help
int help(int mode) {
FILE * pFile;
long lSize;
char * buffer;
 switch (fork()) {
  case -1:
   printf("Impossibile creare un nuovo processo\n");
   return;
  case 0:
    pFile = fopen ("help.txt","r");
    if (pFile==NULL) exit (1);
    // legge la dimens del file
    fseek (pFile , 0 , SEEK_END);
    lSize = ftell (pFile);
    rewind (pFile);
    // alloca memoria x il file
    buffer = (char*) malloc (lSize);
    if (buffer == NULL) exit (2);
    // copia il file nel buffer
    fread (buffer,1,lSize,pFile);
    printf("%s\n",buffer);
    // terminazione
    fclose (pFile);
    free (buffer);
    return 0;
  default:
   if(mode) {
    if(wait(NULL) == -1)
     perror("wait");
   }
}
}

C'č un problema, la tua funzione č scritta per UNIX, a me serve per Windows
ed č proprio l'API ReadFile(...) che non ho capito come va usata, questo č
il riepilogo:
- devo avere una variabile per le lettere e una per i numeri, ma come le
dichiaro? Come semplici char e int? O devono essere degli array? Oppure
vanno dichiarati come char * e int *?
- come faccio a far mettere il primo carattere nella variabile char e
stamparlo, il secondo nella variabile int e stamparlo, il terzo di nuovo
nella variabile char e stamparlo e cosě via fino alla fine del file?
Scusate, ma con il C sono all'inizio.

 C'è un problema, la tua funzione è scritta per UNIX
non ho guardato tutto il codice, ma sappi che
FILE, fopen, fread, fgets etc.etc.etc. non sono UNIX,
sono C standard e funzionano benissimo anche sotto windows.
In ogni caso qui ci si occupa di aspetti piu' o meno
standard del linguaggio. Se per qualche motivo tuo
vuoi proprio usare le API di windows, e' piu' fruttuoso
se ti rivolgi ad un gruppo in cui si trattano problemi
di programmazione relativi a windows. In particolare
al gruppo:
it.comp.programmare.win32
ciao,
g.
ciao,
g.

Ti ringrazio per il consiglio.


mmm, sono andato sull'altro NG, ma a quanto pare di là non vogliono si parli
di linguaggi specifici e a me serve proprio usare le API di windows col C...
Spero che qualcuno mi aiuti da questa parte.


 mmm, sono andato sull'altro NG, [...]
Veramente io il tuo messaggio su it.comp.programmare.win32 non lo vedo.
Me lo indicheresti ?
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Leggendo il manifesto dell'NG ho notato che c'è scritto quanto ho riportato,
ovvero che non va fatto riferimento ad un particolare linguaggio di
programmazione, ma solo in generale sul funzionamento delle API, quindi non
ho inviato il messaggio.
"Andrea Laforgia"


 ho inviato il messaggio.
Tu non vuoi discutere di C, tu vuoi discutere dell'uso delle API in C,
quindi quel gruppo va benissimo. Il manifesto va interpretato nel modo
corretto: esclude la trattazione di argomenti legati **esclusivamente** al
linguaggio (es.: chiedere come si scrive un "for" in C), ma non all'uso
delle API in quel linguaggio. Se tu avessi buttato un occhio ai messaggi di
quel gruppo te ne saresti accorto. E poi, off-topic per off-topic, lo sei
MOLTO di piů qui dentro, quindi spostati lě, dove non lo sei.
