Newsgroup: it.comp.lang.c++
Titolo: Programmi c++ che salvano su HD

Vorrei sapere come fare a salvare permanentemente i dati su Hard Disk
utilizzando i programmi scritti da me con C++ sotto Dos.
Ad esempio se scrivo un prg che accetta come input i dati di un archivio
(nome, cognome, telefono etc.) che tecnica uso per salvarli su disco fisso?
Esiste qualche funzione o routine?
Grazie anticipato e saluti


Certo. La classe fstream e derivate servono proprio a quello. Es.:
struct Record
{
    char nome[ 20 ];
    char cognome[ 20 ];
    char telefono[ 15 ];
} dati;
strcpy( dati.nome, "Enrico Maria" );
strcpy( dati.cognome, "Giordano" );
strcpy( dati.telefono, "123456789" );
ofstream outfile( "RUBRICA.DAT" );
outfile.write( ( char * ) &dati, sizeof( dati ) );
outfile.close();
EMG


Se ho capito bene vorresti salvare dei dati in un File giusto??
La cosa è semplice.
Devi usare le funzioni fopen, fread, fwrite, fprintf, fclose.
Cercale nell'Help del compilatore per maggiori informazioni.
Comunque il tutto è dichiarare un puntatore a file
// FILE *F ;
poi apri il file:
// F = fopen("Prova.dat", "rb+");
il primo parametro di fopen vuole il nome del file che devi aprire.
Il secondo invece è opzionale:
"r"    Apre il file in sola lettura in modalità testo
"rb"   //   //    //  //   //  //   in modalità binaria
"rb+"  Apre il file in modalità di lettura e scrittura
"w"    Apre un file in scrittura, ma lo azzera se già esiste
"a"    Apre il file in modalità di scrittura e si posiziona alla fine del
file.
Eccoti un piccolo programma sotto DOS:
-----------------------------------------------------------
void main
(
)
{ FILE *F ;
  char S[100] ;
  printf(Caricare(1) o salvare(2)??");
  scanf("%d", &S);   // <------  Non ricordo come si usa
  if (atoi(S) == 1)
  { printf("Inserire un numero:");
    scanf("%d", &S);   // <------  Non ricordo come si usa
    if (F = fopen("Prova.dat", "wb+"))
    { fprintf(F, "%d", atoi(S));
      printf("Salvataggio riuscito");
      // IMPORTANTE
      fclose(F);
    }
    else
      printf("Impossibile aprire il file Prova.dat!");
  }
  else
    if (atoi(S) == 2)
    { if (F = fopen("Prova.dat", "rb");
      { fread(S, 1, sizeof(int), F); <-Non ric. come si usa
        printf("Il numero è : %d", atoi(S));
        fclose(F);
      }
      else
        printf("Impossibile aprire il file Prova.dat");
    }
}
-----------------------------------------------------------
Non so se funziona perchè lo scritto adesso nella mail senza nemmeno
compilarlo.
Alcune funzioni non ricordo com si usano perchè non le uso più.
Comunque leggiti l'Help e se hai problemi non esitare ad esporli.
Ciao
Giovanni.

 Devi usare le funzioni fopen, fread, fwrite, fprintf, fclose.
Guarda che siamo su un newsgroup dedicato al C++ e non al C.
EMG

...

Per tua informazione il C++ comprende anche le funzioni del C.
Non credo che dobbiamo per forza programmare con Dll, librerie della
Microsoft.
Secondo me le MFC sono utili, ma preferisco INVENTARE IO qualcosa di utile
anche con semplici funzioni.
Giovy.

 anche con semplici funzioni.
Guarda che il C++ ha una sua libreria standard (che copre anche l'I/O),
non e' necessario usare librerie proprietarie o riscriversi tutto.
	Mauro

 anche con semplici funzioni.
Spiegami cosa c'entrano DLL, Microsoft o MFC con la semplice gestione
dei files. Io intendevo dire solamente che essendo in C++ si devono
utilizzare le apposite classi della sua libreria standard (fstream e
derivate) e non quelle della libreria del C. Il fatto che fopen() e
compagnia siano del C e non del C++ te lo dice anche il fatto che
l'include relativo si chiama cstdlib.
EMG

...

Ti prego di scusarmi, ma non avevo capito!!!!