Newsgroup: it.comp.lang.delphi
Titolo: Come sapere quanto occupa un file.

In byte...
grazie
Anto

 Anto
e ce ne sono di sistemi !!
Volendo, anche con la "FindFirst" ci puoi riuscire perchè nel record
TSearchRec c'è una variabile Size che dovrebbe restituire la dimensione del
file.
Oppure c'è la funzione "FileSize" che ti spiana la strada, ma è limitata in
quanto fallisce con i file di testo.
Ci potresti anche riuscire con la classe TFileStream, infatti se apri il
file, la proprietà Size ti restituisce la dimensione dello stream, in questo
caso del file.
Un altro modo è tramite la funzione "FileSeek" che permette di spostare il
puntatore di posizione tra i vari byte del file.
Uno potrebbe pensare: "cosa me ne importa di spostarmi tra i vari byte"
Effettivamente la dimensione del file è un secondo effetto della funzione.
Infatti questa restituisce di quanti byte è stato spostato il puntatore.
La funzione vuole 3 parametri. Il primo è l'handle al file, il secondo è il
numero di byte di spostamento, il terzo l'origine da cui iniziare a
spostarsi.
Quindi se scrivi la funzione in questo modo:
DimensioneFile:=FileSeek(Handle_Al_File, 0, 2);
la variabile DimensioneFile, dovrebbe riportarti il numero di byte che
occupa il file.
Ah....l'handle al file lo puoi ottenere tramite la funzione "FileOpen",
comunque leggi l'help di Delphi per ulteriori dettagli.
Infine, tra tutte queste soluzioni, ce ne è una molto diretta, tramite l'API
di Windows, cioè la "GetFileSize".
Anche a questa serve l'handle al file, quindi stesso discorso tramite la
"FileOpen" o l'API "OpenFile" un po' più dettagliata !!
Un'ultima idea bizzarra è di scorrere tutti i byte del file fino a quando
questo non è finito e dentro il ciclo piazzare un contatore.
Vabbè, scherzo. Vedi tu quale usare, anche perchè ora non mi vengono in
mente tutti i pro e i contro di tutte le soluzioni.
Ti saluto....ciao ciao !!
Antonio Tarolla

Potresti, per cortesia, usare Re: come prefisso nelle risposte e
non R: ? Thanks.
--
CyberWalkie - walkietalkie(at)
libero.it

 quanto fallisce con i file di testo.
Non ho mai capito questa distinzione tra "file" e "file di testo" ...
un file è un file è un file!!
(da : "a rope is a rope is a rope", Leisure Suit Larry 3)
Ciao!! Davide DG.

Non ho mai capito questa distinzione tra "file" e "file di testo" ...
La distinzione e' importante, a seconda di come si operi sul
file.  La disposizione delle informazioni, difatti, in un file
binario e in un file di testo e' rilevante ai fini della lettura.
Ci sono sistemi, per esempio, in cui i file di testo vengono
memorizzati per record a lunghezza fissa, in cui le linee vengono
"blank-filled", se sono + piccole di tale lunghezza.
Su sistemi con record a lunghezza variabile c'e' il problema
dell'interpretazione dell'"a-capo".
UNIX converte la sequenza di a-capo con LF, DOS/Windows con
CR+LF, altri sistemi con una lunga sfilza di caratteri nulli,
ecc... ecc... 
Operare con una FileSeek su un file di testo non ha alcun senso,
se viene trattato come file di testo, proprio perche', in
lettura, queste sequenze vanno trattate come un unico carattere e
non si puo' saltare in mezzo ad esse, senza produrre danni.
--
CyberWalkie - walkietalkie(at)
libero.it


GetFileAttributesEx se non vuoi aprire il file (ovvero partendo dal suo
path)...
GetFileSize se hai il suo handle
Ciao,
Stefano

 file.  La disposizione delle informazioni, difatti, in un file
[snip]
Evidentemente dovevo aggiungere qualche faccina... forse non si era
capito che stavo scherzando... ;P
Per me un file è un file, punto. Come leggerlo, in base al suo tipo, è
un'altra cosa.
Per rilevare la dimensione *in byte* di un file, la FileSize va benissimo
anche per file (non le variabili, i file!) "di testo".
(era per sottolineare questo che ho postato).
Del resto un file "di testo" non sarà letto in una maniera univoca, lo hai
detto anche tu, dipende dalla piattaforma, ecc.
Ciao! Davide DG.

detto anche tu, dipende dalla piattaforma, ecc.
Infatti, parlare di dimensione *in byte* di un file di testo, in
molti sistemi, non ha senso.
--
CyberWalkie - walkietalkie(at)
libero.it

 "Note: FileSize can't be used on a text file." [Help]
Già. Questo extract non si riferisce ai file (elementi del FileSystem), ma
alle
variabili di tipo textfile, per le quali la unit System mette a disposizione
delle
funzioni di servizio standard (read, write, ecc.).
Queste funzioni si pongono un layer sopra la definizione di file.
Ad ogni modo è una speculazione, sulla quale mi pare di ricordare ci eravamo
già confrontati, arrivando a conclusioni diverse, mi sembra.
Ciao. Davide DG.

già confrontati, arrivando a conclusioni diverse
Il problema e' che potrei essere anch'io del tuo punto di
vista, ma poi avremmo entrambi torto, quindi lascio perdere.
--
CyberWalkie - walkietalkie(at)
libero.it

 non R: ? Thanks.
ma "Re: ......" o "R: ...." mi sbaglio o deriva da OutLook ?
Fammi capire...ma tu hai OutLook aggiornato oppure ogni volta aggiungi la
"e" mancante ? O magari ti fa schifo OutLook e usi un'altro programma per
gestire posta e newsgroup ?
Perchè la mia impressione è che tantissimi in questo newsgroup soffrono di
tale BUG e non ce ne siamo accorti oggi !!
Ti saluto.....sarà difficile ricordarsi ogni volta la "e" mancante !!
Ciao ciao...
Antonio Tarolla

Ti saluto.....sarà difficile ricordarsi ogni volta la "e" mancante !!
Dovrebbe essere possibile "patchare" outlook.
Lo standard vuole "Re:" e non "R:" per le risposte ai messaggi.
Dovrebbe esserci una RFC in proposito.
--
CyberWalkie - walkietalkie(at)
libero.it

 Ti saluto.....sarà difficile ricordarsi ogni volta la "e" mancante !!
Basta abituarsi (dopodiche', se ti trovi con un nr RFC compliant
manderai dei Ree: :) )
Saluti
Paolo Arosio

 Dovrebbe essere possibile "patchare" outlook.
Lo è ...
per Antonio: Cerca su google e dovresti trovarlo facilmente. In alternativa
puoi installare una versione aggiornata di OE o ricordati la 'e'! :-)
--
- Carlo -
c.b...@libero.it

Non è certo un effetto voluto ...
Hmmm... io penso di si'.
MS cerca di contrastare gli standard esistenti creandone di
propri (l'ha sempre fatto), cosi' come in questo caso sta
volutamente andando contro la ben nota RFC che tutti i produttori
di mailer dovrebbero conoscere.
--
CyberWalkie - walkietalkie(at)
libero.it

 vista, ma poi avremmo entrambi torto
Non comportarti in modo infantile. So che non lo sei e che sei un ottimo
programmatore, ma per favore scendi dal piedistallo.
Ciao, Davide DG.

 carattere.
calma calma... fai un passo più avanti... presente l'Edit.exe del dos? ..
ok... apri un file .TXT con quello, prima di premere APRI però seleziona la
cosina [X] File binario...
TA-DAAAAAA! ed ecco un file di testo... NON IN FORMATO TESTO!... non è
magia, ed è sempre lo stesso file... ora contati i byte... salvalo in .MIO
... riaprilo in binario... risalvalo in .TXT e aprilo con il blocco note...
Trovi differenza ora tra un file di testo e un EXE?... io no...
ankora differenti?... allora fai questo...... togli al sistema operativo la
possibilità di avviare gli EXE... e togli i ari editor di testo...
gli EXE e i TXT sono ora delle file di bit inutili...
gli editor sono solo "interpreti" di file binari, che ci visualizzano i
caratteri ascii (o altri set)... è solo un altro modo di vedere il file...
ma tu non ti devi fidare di questo... noi siamo programmatori... a noi serve
quello che c'è sotto...
che caldo... sarà questo che mi ha fatto scrivere in quel modo... scusami in
partenza =) ... non ho voglia di rileggere...
by by...
Raptor


[SNIPPONE]
A parte il tono leggermente polemico che e' cresciuto con l'andare avanti di
questa discussione, secondo il mio modesto parere Raptor ha colto nel segno.
Un file diventa file di testo quando lo si apre in modalita' testo.
Tra l'altro, se andate a vedere nelle funzioni API di Windows, non c'e' una
funzione che permetta di aprire un file in modalita' testo, o, se c'e', non
l'ho mai vista e mai usata. Non penso ci siano molti SO che implementino a
livello di sistema lo strato di gestione dei file di testo.
La gestione di un file come "file di testo" e' implementata dal Delphi (e da
altri linguaggi) ad uno strato superiore, quindi "superabile".
Ovvio che aprendo il file in questione come un normale FILE, il sistema di
gestione di Delphi lo "vede" come un normale file binario.
Se invece lo apriamo come TEXTFILE le cose cambiano, perche' il Delphi si
aspetta di leggere sequenze di caratteri separati, se necessario, da CR (o
LF o entrambi).
Il fatto che non si possa eseguire un FileSize su di un TEXTFILE (ed e'
questo che intende la parte citata della guida, visto che, ragionevolmente,
non potrebbe essere altrimenti) dipende probabilmente dall'implementazione
logica dello strato superiore.
Quindi, in questo specifico caso, sono daccordo con Davide quando dice che
"un file e' un file" ;-)
Saluti,
Stefano

logica dello strato superiore.
Esattamente.
x CyberWalkie: Altro esempio. Prendi un qualunque programma di audio
editing e invece di caricare un file .WAV, apri un file .EXE o un file
di testo (tanto per rimanere in tema). A questo punto lo puoi
tranquillamente  suonare!
I bit sono sempre quelli. L'estensione del file in genere ti indica il
contenuto dello stesso e quindi ti da' la possibilita' di capire come
interpretare quei bit. Quindi un file .BMP lo puoi vedere, editare
come testo, suonare come se fosse un wav ecc, ecc.
Chris

logica dello strato superiore.
L'uso di FileSize su un file di testo e' vietata quando si
utilizza il file di testo. Inoltre la struttura dei file di testo
di un determinato sistema operativo puo' essere variabile.  Non
ha senso parlare, in generale, di dimensione in byte di un file
di testo, perche' l'unita' di misura di un file di testo e' il
carattere.  Ci sono sistemi, lo ripeto, in cui non ha alcun senso
tirare fuori la dimensione in byte, perche' questa misura non da'
alcuna informazioni su quanto e' effettivamente grande il testo
contenuto.  
--
CyberWalkie - walkietalkie(at)
libero.it

quello che c'è sotto...
Quello che c'e' sotto non e' cio' che ti serve.
--
CyberWalkie - walkietalkie(at)
libero.it

>Il fatto che non si possa eseguire un FileSize su di un TEXTFILE (ed e'
p.s.: la guida, lo ripeto, non intende TextFile, ma *proprio*
file di testo.
--
CyberWalkie - walkietalkie(at)
libero.it


E' meglio se ricapitoliamo:
Il nostro buon Veloci Raptor, scrisse come oggetto:
"Come sapere quanto occupa un file"
e come testo:
"In byte...
grazie
Anto"
Il nostro ancora + buon Antonio Tarolla rispose dicendo, tra l'altro,
questo:
"Oppure c'è la funzione "FileSize" che ti spiana la strada, ma è limitata in
quanto fallisce con i file di testo."
Mi duole dirlo ma sbaglio' (Antonio perdonami :P), perche' la funzione
FileSize non fallisce con i file di testo, ma con i TEXTFILE.
Tutto qui. Io ho "modellato" le mie risposte in funzione della richiesta di
Veloci Raptor.
Se poi la disquisizione si sposta sul significato della guida di Delphi...
beh.. in quel caso divertitevi... ci sono una marea di incongruenze la
dentro :P
Ciao,
Stefano

 di mailer dovrebbero conoscere.
Io non la vedo così.
Non discuto che Microsoft cerchi di creare standard propri ma in questo caso
mi sembra fuori luogo e, oltretutto, stupido.
Non ha senso creare uno std che imposta una R: al posto di un Re: ...
inoltre la versione di OE di cui dispongo io risponde automaticamente con un
Re:, quindi andrebbe contro il proprio standard.
Credo che ci sia addirittura una patch Microsoft per risolvere il problema.


 wrote in message
news:33M27.3997$2v6.1...@news.infostrada.it...

Il problema in questo caso e' l'internazionalizzazione dell'applicazione.
Il problema infatti sussiste solo nella versione Italiana (e forse in quella
localizzata x altri paesi).
Re sta per Reply che, in Italiano, si dice Rispondi. I traduttori hanno
pensato bene di metterci solo una R, che cmq e' sempre meglio di un Ri.
Io uso sempre la versione inglese dei SO e infatti non ho mai avuto questo
problema.
Saluti,
Stefano

> Credo che ci sia addirittura una patch Microsoft per risolvere il
problema.
Una patch può essere trovata qui : 
http://www.vene.ws/mail/r-out.asp
Ciao!
--
Davide DG.