Come faccio ad ottenere la dimensione di un file in Byte?
Come faccio ad ottenere la dimensione di un file in Byte?
su *nix?
man fstat
credo sia l'unico modo
cmq non mi pare ci siano nulla nelle librerie standard. questa è una syscall di *nix
Credo che una combinazione di fseek con paramentro SEEK_END e di ftell Ti possano aiutare.la prima posiziona il puntatore a file alla fine,la seconda restituisce la posizione di tale puntatore in byte
Il centro dell'attenzione non è sempre un buon posto in cui trovarsi
Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)
Non sono sotto Unix...codice:#include <windows.h> DWORD fileSize( char* percorsoFile ) { DWORD risultato; WIN32_FIND_DATA FindFileData; HANDLE hFind = INVALID_HANDLE_VALUE; hFind = FindFirstFile( percorsoFile, &FindFileData ); //Se il file è valido if (hFind != INVALID_HANDLE_VALUE) { risultato = GetFileSize( hFind, NULL); FindClose(hFind); } return risultato; }
Sto cercando di far funzionare questa, ma qualcosa non va! :master:
HELP!
Uhm... così?
Dovrebbe andare a meno di errori... Non ho controllato.codice:int fileSize(char *f) { File *f; int c, d; if (f = fopen(f, "rb") == NULL) { cout << "Errore"; } while (!feof(f)) { c = fread(f); d++; } fclose(f); return d-1; }
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
codice:#include <windows.h> DWORD GetFileDimension( LPCSTR szFileName ) { HANDLE hFile; DWORD dwSize; hFile = CreateFile( szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if ( !hFile ) return ( -1 ); dwSize = GetFileSize( hFile, NULL ); CloseHandle( hFile ); return ( dwSize ); } .... GetFileDimension( "C:\\WINDOWS\\file.ext" );
DYNAMIC+ [ E-mail ]
Secondo me non si può fare!
Funziona ma è lentissimo se ho file grandiOriginariamente inviato da LeleFT
Uhm... così?
Dovrebbe andare a meno di errori... Non ho controllato.codice:int fileSize(char *f) { File *f; int c, d; if (f = fopen(f, "rb") == NULL) { cout << "Errore"; } while (!feof(f)) { c = fread(f); d++; } fclose(f); return d-1; }
Ciao.
PErfetto grazie!Originariamente inviato da DYNAM!C+
codice:#include <windows.h> DWORD GetFileDimension( LPCSTR szFileName ) { HANDLE hFile; DWORD dwSize; hFile = CreateFile( szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if ( !hFile ) return ( -1 ); dwSize = GetFileSize( hFile, NULL ); CloseHandle( hFile ); return ( dwSize ); } .... GetFileDimension( "C:\\WINDOWS\\file.ext" );
Concordo che è meglio usare codice C standard, il C non è che ha una grande libreria, ma quel poco che offre perche non usarlo? Questa è una funzione che restituisce la dimensione in byte di un file:Originariamente inviato da unomichisiada
Credo che una combinazione di fseek con paramentro SEEK_END e di ftell Ti possano aiutare.la prima posiziona il puntatore a file alla fine,la seconda restituisce la posizione di tale puntatore in byte
codice:long dim(const char* nomefile){ FILE * pFile = fopen (nomefile, "r"); if(pFile == NULL) return 0; fseek (pFile, 0, SEEK_END); long size = ftell (pFile); fclose (pFile); return size; }
Sun Certified Java Programmer
EUCIP Core Level Certified
European Certification of Informatics Professionals
se il codice deve girare su uno specifico OS,
è meglio usare le funzioni native del sistema
come le api o gli interrupt.
DYNAMIC+ [ E-mail ]
Secondo me non si può fare!