Newsgroup: it.comp.lang.c
Titolo: Dimensione di un file.

Come faccio a sapere la dimensione di un file?

Come faccio a sapere la dimensione di un file?
ftell() dopo esserti posizionato alla fine con fseek() 
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
--------------------------------------------------------------
"Partire e' un po' morire e morire e' partire un po' troppo !"
--------------------------------------------------------------

Come faccio a sapere la dimensione di un file?
fai un bel while con fopen e a ogni ciclo aumenti un contatore di 1
siccome fopen quando ha finito il file restituisce zero il contatore
alla fine ti da la dimensione del file
Augusto Pucci
Webmaster di Prospektiva On-line
http://www.prospektiva.it

ftell() dopo esserti posizionato alla fine con fseek() 
Ah bhe anche..epro' cosi' e' scorretto :-)


alla fine ti da la dimensione del file
Spero tanto che tu stia scherzando ?


Ah bhe anche..epro' cosi' e' scorretto :-)
Spiegami, di grazia, perche' sarebbe scorretto...
(Occhio a quello che dici :)


 alla fine ti da la dimensione del file <snip>
Forse e' meglio che metti un esempio, non riesco a capire come fa la
fopen a scandire il file...
Se intendevi di leggere un carattere alla volta e contarli (nota: il
file deve essere aperto come binario), puo' funzionare, anche se come
efficienza non e' il massimo della vita, meglio allora la soluzione
di Laforgia.
Andrea
-- 
 _     /°#     ----------------+-------------------------
°  \  /        Andrea          | arimicci @@
   |++~|            Rimicci    |         aritaly. com
    \ /  --------- OS/2 V5 "Phoenix" --------------------
     |   The MIDI JukeBox:
    _|_                  
http://www.aritaly.com/eng/midi/
---------------------------------------------------------

Spero tanto che tu stia scherzando ?
Io ho un metodo migliore:
Al posto del contatore, fai partire un timer. A seconda della
velocita' di  I-O del tuo disco, il tempo di scansione del file e'
direttamente proporzionale alla lunghezza del file. Ne ricavi quindi
con una sola divisione: Tempo impiegato / velocita' di lettura,
l'effettiva dimensione in byte.
N.B. Se il transfer rate e' espresso in kb devi prima convertirlo in
byte.

Avevo semplicemente chisto la dimensione di un file.
Trovo ottima la scelta di ftell+fseek.
Cmq evitate le polemiche..... ognuno e' a casa propria e fa come cazzo
gli pare!!
Grazie a tutti.

Di solito io prima di bere il caffe´ ci metto un cucchiaino di zucchero, poi
tengo ben salda la mano sul cucchiaino e con l´altra comincio a girare la
tazzina in modo tale che lo zucchero si sciolga. Un mio amico invece ancora
usa girare il tavolino dove la tazzina e´ poggiata tenendo fermo il
cucchiaino.

(Occhio a quello che dici :)
Xche' e' un bieco trucco per evitare di fare un cilclo :-))) Non certo
eprche' non funzioni .-)))




Stavo scherzando...certo che devi usare fseek ftell :-)


Spero tanto che tu stia scherzando ?
Sai a me piacciono le tecniche ehm..dirette...un po'0 macchinose :-))


 ftell() dopo esserti posizionato alla fine con fseek() 
Oppure una bella fstat() che fra l'altro ritorna una serie
di dati in piu' rispetto alla sola dimensione.
E non dire che non e' portabile, andando a memoria e' pure POSIX.
-- 
Francesco P. Lovergine  f.lovergine AT 
iesi.ba.cnr.it

E non dire che non e' portabile, andando a memoria e' pure POSIX.
fstat() non e' portabile.


eprche' non funzioni .-)))
Mah !...


 e' portabile, andando a memoria e' pure POSIX.
  Infatti non e` portabile: ;)
  1. Richiede come parametro il descrittore del file in forma numerica 
     e non su tutte le piattaforme e` garantita l'esistenza 
     delle funzioni di I/O sul FS come open() et cetera;
  2. Il tipo /struct/ /stat/, che contiene le informazioni sul file 
     ottenute con fstat() puo` essere differente da piattaforma 
     a piattaforma.
	Alla prossima,
		Marco

 E non dire che non e' portabile, andando a memoria e' pure POSIX.
Date un'occhiata alla FAQ list di comp.lang.c; specificatamente alle
domande/risposte 12.25 (uso di fgetpos e fsetpos in luogo di
ftell/fseek) e 19.12 (ove spiega che su sistemi non-Unix [f]stat o
fseek/ftell danno solo dimensioni approssimate).
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it


http://www.multiplayer.it
 ?
ciao

fseek/ftell danno solo dimensioni approssimate).
Odio aver ragione..anche quando dicevo per scherzo .-)))


 		Marco
Se ne puo' concludere che non esiste un modo standard di ricavare
tale informazione? E presumibilmente, per un programma portabile
tale informazione non dovrebbe neanche essere contemplata.
Ma poi esistono programmi (non banali) portabili? 
E a qualcuno gliene frega davvero qualcosa?
Autoconf e automake permettono di scrivere programmi multi-piattaforma,
ma facendo ricchi salti mortali, perfino per piattaforme unix-like 
che 'dovrebbero' essere parenti stretti.


 E a qualcuno gliene frega davvero qualcosa?
  Il punto che si perde spesso di vista in questo tipo di discussioni e`
che lo standard non serve affatto a scrivere un programma portabile su
qualsiasi piattaforma ("write once, use everywhere" e` il motto di Java,
non del C) ma a creare una base comune di partenza per la scrittura di
codice.
  Il programmatore, conoscendo lo standard, sara` sicuro di riscontrare
le sue conoscenze in un sotto-insieme significativo delle
caratteristiche di tutte le piattaforme e di tutti gli ambienti di
sviluppo su cui lavorera`.
  Non e` un caso che, conoscendo il C standard, sia possibile
programmare agevolmente su PC, PowerPC, sistemi embedded. Escluso,
ovviamente, il mondo Microsoft. ;)
	Alla prossima,
		Marco

Odio aver ragione..anche quando dicevo per scherzo .-)))
Ma quale ragione ?!


 fstat() non e' portabile.
.......ma e' molto fica ....... :) :) :)
Ivan Molella

 alla fine ti da la dimensione del file
ROTLF :-D
--
 Ciao, Bianco.
 Reply to 
luca....@tiscalinet.it

 		Marco


ciao
No


Ma quale ragione ?!
Mi riferivo alla frase :"Date un'occhiata alla FAQ list di
comp.lang.c; specificatamente alle
domande/risposte 12.25 (uso di fgetpos e fsetpos in luogo di
ftell/fseek) e 19.12 (ove spiega che su sistemi non-Unix [f]stat o
fseek/ftell danno solo dimensioni approssimate)."


comp.lang.c; specificatamente alle
dove si trovano le FAQ?
-------------------
Aranar


mi pare www.programmazione (o programmare) .it
-- 
Antonio barbone ......
Outside of a dog, a book is man's best friend.
Inside of a dog, it's too dark to read.
		-- Groucho Marx