carlito00w (Normal User)
Newbie
Messaggi: 10
Iscritto: 20/06/2009
|
cdt
come faccio ad eseguire un controllo su un file txt, per sapere se è vuoto?
|
|
Xaratroom (Ex-Member)
Expert
Messaggi: 526
Iscritto: 03/04/2008
|
Definisci "vuoto".
Se lo apri e non riesci ad eseguire una lettura (per il raggiungimento della fine del file) non sono presenti dati.
|
|
carlito00w (Normal User)
Newbie
Messaggi: 10
Iscritto: 20/06/2009
|
puoi farmi un esempio?
|
|
LittleHacker (Member)
Guru
Messaggi: 1033
Iscritto: 28/04/2009
|
Mi sembra che devi includere le libbrerie per la lettura e la scrittura iostream e fstream e poi gli dai il percorso dove è salvato il file e poi se è vuoi allora digli vuoto
Codice sorgente - presumibilmente C/C++ |
#include <iostream>
#include <fstream>
if(file==''){
cout << "vuoto";
}
|
Mi sembra che sia così il codice però non so
ma dispiace ma non so il codice per la lettura del file.
|
|
Xaratroom (Ex-Member)
Expert
Messaggi: 526
Iscritto: 03/04/2008
|
Postato originariamente da LittleHacker:
Mi sembra che devi includere le libbrerie per la lettura e la scrittura iostream e fstream e poi gli dai il percorso dove è salvato il file e poi se è vuoi allora digli vuoto
Codice sorgente - presumibilmente C/C++ |
#include <iostream>
#include <fstream>
if(file==''){
cout << "vuoto";
}
|
Mi sembra che sia così il codice però non so
ma dispiace ma non so il codice per la lettura del file. |
No...
Non è così.
L'esempio non te lo faccio: prova e se non ci riesci posta il codice che hai prodotto. |
|
()
Newbie
Messaggi:
Iscritto:
|
aprire un file, soprattutto se si è nel dubbio che il file stesso possa esistere o che sia valido, può essere dispendioso in termini di risorse allocate.
Un metodo veloce e sicuro per testare se un file è vuoto consiste nell'usare la funzione ANSI C stat().
uno stralcio di codice per illustrarne il funzionamento:
Codice sorgente - presumibilmente C++ |
void printFileSize(const char *nomefile) { // struct che conterra' le informazioni sul file struct stat fileInformation; // codice di errore int e; // chiamo la funzione stat() e = stat(nomefile, &fileInformation); // controllo eventuali errori if (e == -1) { printf("Error opening %s\n", nomefile); return; } // stampo la dimensione del file printf("il file %s pesa %d bytes\n", nomefile, fileInformation.st_size); }
|
|
|
Xaratroom (Ex-Member)
Expert
Messaggi: 526
Iscritto: 03/04/2008
|
Postato originariamente da TheKaneB:
aprire un file, soprattutto se si è nel dubbio che il file stesso possa esistere o che sia valido, può essere dispendioso in termini di risorse allocate.
Un metodo veloce e sicuro per testare se un file è vuoto consiste nell'usare la funzione ANSI C stat().
uno stralcio di codice per illustrarne il funzionamento:
Codice sorgente - presumibilmente C++ |
void printFileSize(const char *nomefile) { // struct che conterra' le informazioni sul file struct stat fileInformation; // codice di errore int e; // chiamo la funzione stat() e = stat(nomefile, &fileInformation); // controllo eventuali errori if (e == -1) { printf("Error opening %s\n", nomefile); return; } // stampo la dimensione del file printf("il file %s pesa %d bytes\n", nomefile, fileInformation.st_size); }
|
|
E se l'utente è sotto windows ? |
|
()
Newbie
Messaggi:
Iscritto:
|
|
|
Xaratroom (Ex-Member)
Expert
Messaggi: 526
Iscritto: 03/04/2008
|
Postato originariamente da TheKaneB:
su windows la funzione da chiamare è _stat()
si comporta in modo quasi identico, ma dal momento che Windows non supporta alcune delle features di UNIX, alcuni dei campi della struct rimarranno vuoti (come il st_gid).
info: http://msdn.microsoft.com/en-us/library/14h5k7ff(VS.71).aspx |
Quindi per far compilare il mio codice su windows e su linux dovrei "impostare" una compilazione condizionale tramite direttive di precompilazione...
Certamente è più semplice fare in questo modo:
Codice sorgente - presumibilmente C/C++ |
FILE *fp = fopen ("file", "r");
if (fp == NULL)
printf("FIle inesistente");
else
fclose(fp);
|
oppure in cpp:
Codice sorgente - presumibilmente C/C++ |
#include <fstream>
....
ifstream fp ("file", ...);
if (!fp)
printf("FIle inesistente");
else
fp.close();
|
Naturalmente se controlli l'esistenza di un file, probabilmente, intendi leggerne il contenuto. Ultima modifica effettuata da Xaratroom il 24/06/2009 alle 13:45 |
|