PDA

View Full Version : [C++] Dimensione di un file


leon84
09-01-2006, 12:32
Come faccio a conoscere la dimensione di un qualsiasi file ? Mi serve per fare dei controlli sul file in funzione della sua dimensione in byte ...

Che classe utilizzare ?

kk3z
09-01-2006, 15:08
stat credo sia portabile, altrimenti se sei su windows GetFileSize (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/getfilesize.asp)

AbuJaffa
10-01-2006, 14:48
Potresti fare cosė: ti posizioni alla fine del file con

fseek( puntatore_file, 0 , SEEK_END)

e leggi il numero di byte con

ftell(puntatore_file)

;)

Fenomeno85
10-01-2006, 17:34
Potresti fare cosė: ti posizioni alla fine del file con

fseek( puntatore_file, 0 , SEEK_END)

e leggi il numero di byte con

ftell(puntatore_file)

;)

questo č il migliore metodo ;)

FILE *fp;
char namefile [] = "file";
fp = fopen (namefile,"r");
if (fp == NULL){
printf ("the file doesn't exist.");
return (-1);
}
fseek (fp,0, SEEK_END);
printf ("File has this size:%d", ftell(fp));
fclose (fp);

ocio che questo va bene solo se il file č binario altrimenti ti restituisce un valore diverso ;)

adesso ti faccio la versione che funziona con tutti ;)


~§~ Sempre E Solo Lei ~§~

Fenomeno85
10-01-2006, 17:54
provato sia file binario che file di testo:


#include <io.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>

int _tmain()
{
int fp;
if((fp = _open( "c:\\INSTALL1.LOG", _O_RDWR)) != -1 )
{
float size = _filelength(fp);
printf( "File length before: %6.2f KB\n", (float(_filelength(fp)))/1024);
_close(fp);
}
else printf ("Error to open the file, the file doesn't exist.\n\n");
system ("PAUSE");
return 0;
}


oppure in questo modo superveloce ;)


#include <sys/stat.h>
#include <stdio.h>


int _tmain()
{
struct stat results;
if (stat("c:\\prova", &results) == 0)
printf ("%6.2f KB\n\n", float(results.st_size)/1024);
else
printf ("error.");
system ("PAUSE");
return 0;
}


questo dovrebbe essere anche portabile :D

~§~ Sempre E Solo Lei ~§~



~§~ Sempre E Solo Lei ~§~

AbuJaffa
10-01-2006, 20:44
provato sia file binario che file di testo:


#include <io.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>

int _tmain()
{
int fp;
if((fp = _open( "c:\\INSTALL1.LOG", _O_RDWR)) != -1 )
{
float size = _filelength(fp);
printf( "File length before: %6.2f KB\n", (float(_filelength(fp)))/1024);
_close(fp);
}
else printf ("Error to open the file, the file doesn't exist.\n\n");
system ("PAUSE");
return 0;
}


oppure in questo modo superveloce ;)


#include <sys/stat.h>
#include <stdio.h>


int _tmain()
{
struct stat results;
if (stat("c:\\prova", &results) == 0)
printf ("%6.2f KB\n\n", float(results.st_size)/1024);
else
printf ("error.");
system ("PAUSE");
return 0;
}


questo dovrebbe essere anche portabile :D

~§~ Sempre E Solo Lei ~§~



~§~ Sempre E Solo Lei ~§~

;) :D

Fenomeno85
10-01-2006, 23:12
;) :D

:D

~§~ Sempre E Solo Lei ~§~