Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Spazio occupato da un file

Ciao a tutti,
Qualcuno sa come recuperare lo spazio effettivamente occupato da un file su
disco? Mi spiego: l'istruzione "FileLen" restituisce i byte di un file,
supponiamo 760, ma se il disco ha cluster da 4 KB l'occupazione effettiva č
4.096 byte. E' possibile ottenere questo valore?
Grazie in anticipo a tutti.
--
Marco Minerva, 
vbco...@libero.it
http://www.marcominerva.com/vbcorner

 occupato da un file su disco?
Per avere la dimensione di un cluster, Hal aveva segnalato parecchio tempo
fa questo link:
http://www.codeguru.com/system/clustersize.shtml
Praticamente devi chiamare il vecchio interrupt 21 da dos. Non lo puoi fare
da VB, ma da C si.
In ogni caso funziona solo se il disco č formattato Fat32. Se č NTFS non va.
Qui trovi un po' di elucubrazioni, sempre del buon Hal:
http://groups.google.it/groups?hl=it&lr=&ie=ISO-8859-1&q=hal+dimensione+clus
ter
Puoi provare eventualmente un altro approccio. Leggi lo spazio libero del
tuo disco, scrivi un file da 1 byte e rileggi lo spazio libero. Fallo 3 o 4
volte e confronta i valori che ottieni, cosě sei sicuro di non prendere
cantonate perchč nel frattempo altri programmi scrivono su disco.
Non č un metodo perfetto, ma č il piů facilmente implementabile.
Ciao
*Roby*

 ha scritto nel messaggio
news:akjeru$1iu1he$1...@ID-94194.news.dfncis.de...


 ottengo ancora una volta 4.096,
Questo va bene, ma fai conto che ha senso solo per HD "piccoli" (fino a
2Gb). Tale API è infatti obsoleta ed è stata sostituita a partire da Win95
OSR2 dalla GetDiskFreeSpaceEx, che però non dà informazioni sul numero di
settori per cluster.
L'API che hai usato tu restituisce un valore errato per quanto riguarda lo
spazio libero, ma può anche restituire valori errati per
lpSectorsPerCluster, lpNumberOfFreeClusters, e lpTotalNumberOfClusters
perchè il sistema operativo modifica questi valori per cercare di
aggiustarli in modo che il calcolo rispetti le reali dimensioni del disco.
Insomma, il fatto che tu ottenga valori corretti è assolutamente casuale. Se
non ti fidi di me, guarda la documentazione dell'API in questione su MSDN.
Per quanto riguarda il metodo corretto di ottenere lo spazio libero su disco
su qualunque sistema operativo, qui c'è un mio vecchio messaggio che
contiene una implementazione corretta (ma che non riguarda i settori per
cluster, spiacente ;-)):
http://groups.google.it/groups?selm=jSOr6.41518%24yl2.961816%40news1.tin.it&
oe=UTF
Ciao
*Roby*

 accomodante di XP con i programmi DOS.
Io direi il contrario... imho...

 > giurerei che la faccenda sia uguale anche sotto Win2000, che č meno


 programmino e vedere se funziona? Mi salverebbe la vita!
Quale programmino? Io win2k ce l'ho se mi dici cosa dovrei provare... ;)
PS:
Si risponde sotto al messaggio originale... non sopra! ;)

 ha scritto nel messaggio
news:akniad$2t05$1...@half.spin.it...

Mi riferisco al programma del sito 
www.codeguru.com
:
http://www.codeguru.com/system/clusterdemo.zip
.
Fammi sapere, grazie!


 
http://www.codeguru.com/system/clusterdemo.zip
.
E' in C++... non ho il compilatore installato... :(

 ha scritto nel messaggio
news:al79fk$m76$1...@half.spin.it...

Dentro lo zip c'č anche l'exe ;-)

 Dentro lo zip c'è anche l'exe ;-)
Allora rispondiamo in modo più esteso... non faccio girare su un pc di
produzione codice che non riesco a comprendere ammenochè non sia
indispensabile... ;-)