Newsgroup: it.comp.lang.c++
Titolo: HELP URGENTE

Ho un piccolo problema abbastanza urgente e abbastanza studipo non riesco a
sapere la dimensione di un file. Mi serve perchè devo sapere se un file si
sta incollando.

 writes:

Huh?  Incollando?  Boh.  Comunque la dimensione di un file e' qualcosa
di esterno al linguaggio e dipende dal sistema operativo che usi;
sotto Unix c'e', ad esempio stat(2) e le sue sorelle fstat ed lstat.
stat/fstat/lstat sono standard POSIX, ed e' possibile che esistano
anche su altre piattaforme.
-- 
Maurizio Loreti  - Linux Is Not UniX -  
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it

 anche su altre piattaforme.
Veramente in ANSI C esiste l'accoppiata fseek(), ftell() che restituisce la
lunghezza del file. Mi pare sia standard, no?
Es:
long GetFileDim(char *path)
{
FILE *f;
long fileLen;
f = fopen(path, "r");
if( NULL == f )
return -1;
fseek(f, 0, SEEK_END);
fileLen = ftell(f);
fseek(f, 0, SEEK_SET);
fclose(f);
return fileLen;
}
Dome
--
------------------------------------------
Domenico Troiano
AI & 3D Coder TFS Project
www.panther3d.com
red...@panther3d.ath.cx
------------------------------------------

 lunghezza del file. Mi pare sia standard, no?
Se il file e' binario.  Dalle FAQ di comp.lang.c, archiviate
sotto 
http://www.eskimo.com/~scs/C-faq/top.html
; Q/A 19.12:
19.12:  How can I find out the size of a file, prior to reading it in?
A:      If the "size of a file" is the number of characters you'll be
        able to read from it in C, it is difficult or impossible to
        determine this number exactly.
        Under Unix, the stat() call will give you an exact answer.
        Several other systems supply a Unix-like stat() which will give
        an approximate answer.  You can fseek() to the end and then use
        ftell(), or maybe try fstat(), but these tend to have the same
        sorts of problems: fstat() is not portable, and generally tells
        you the same thing stat() tells you; ftell() is not guaranteed
        to return a byte count except for binary files.  Some systems
        provide functions called filesize() or filelength(), but these
        are obviously not portable, either.
        Are you sure you have to determine the file's size in advance?
        Since the most accurate way of determining the size of a file as
        a C program will see it is to open the file and read it, perhaps
        you can rearrange the code to learn the size as it reads.
        References: ISO Sec. 7.9.9.4; H&S Sec. 15.5.1; PCS Sec. 12 p.
        213; POSIX Sec. 5.6.2.


 sotto 
http://www.eskimo.com/~scs/C-faq/top.html
; Q/A 19.12:
O forse se viene aperto COME binario?
Cosa ne sa un il SO di come un file viene salvato. Non è sempre e solo una
sequenza di byte?
Dome

 wrote in message
news:5_n_7.7652$WQ2.3...@news2.tin.it...

Se il file lo apri in binario ... il risultato non è portabile.
Se lo apri come testo ... non puoi sapere quanto è lungo se non
leggendolo.
A te la scelta.
P.S.: no, dal punto di vista del sistema operativo un file può essere
binario, testuale o mappatura di memoria virtuale (e forse altro ancora,
dipende dal SO). Semmai è dal punto di vista del file-system che il file
è una sequenza di byte.
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556