Newsgroup: it.comp.lang.visual-basic
Titolo: Recuperare la dimensione di un file enorme

Ciao a tutti...
Ho la necessità di sapere con esattezza la dimensione di files veramente
grandi (oltre i 4 GB).
La funzione FileLen di visual basic restituisce un valore Long che ha quindi
il limite di poco più di 2 GB.
Qualcuno sa cosa potrei usare?
Ho provato con l'API GetFileSize ma non riesco a capire se sbaglio io o se
anche questa ha dei problemi con i grossi file visto che mi restituisce
valori negativi.
Grazie
Maurizio

 con i grossi file visto che mi restituisce valori negativi.
E' giusto. La funzione GetFileSize restituisce un valore senza segno
(DWORD in C/C++), ma in VB tutti i tipi di dato sono con segno, e
quindi in caso di numeri grossi ti restituisce necessariamente un
numero negativo.
Se utilizzi il FileSystemObject ti restituisce la dimensione in byte
corretta senza il minimo problema, testato ora su file di 12 TB
(si', hai capito bene, 12 terabyte).
Ciao.

 [...]

 alfonso
Dal floppy 1 di installazione di win 3.11... ????
:-)
ciao
ugo

ahahahahahahahahahah!
Ciao
Alfonso
[...]


 e dove l'hai preso un file di 12 TB ??!!
L'ho creato al momento.
NTFS5 (quello di Win2000) gestisce gli sparse file, che sono file
che contengono grossi blocchi di dati nulli. Marcando un file come
sparse NTFS non scrive su disco questi blocchi, in modo da ridurne
considerevolmente le dimensioni su disco.
E' quindi possibile creare file di grosse dimensioni (12 TB in
questo caso) completamente vuoti che su disco occupano
effettivamente pochissimo spazio (il file da 12 TB vuoto che ho
creato occupa 4 KB su disco). Ma la dimensione del file e'
effettivamente 12 TB. Ed e' quindi stato possibile testare le
capacita' del FSO con file di grosse dimensioni.
Ciao.

 e dove l'hai preso un file di 12 TB ??!!
runtime.net
:)))


<g>

 > Long che ha quindi il limite di poco piů di 2 GB.



Potrei sbagliarmi, e' codice non testato, ma credo che basti scrivere
Scripting.FileSystemObject
e premere F1 :P
Ciaotutti,
Asterix

"H.P.L." <u...@vaila.ble> ha scritto nel messaggio
news:BTdR6.3218$i71.1...@news.infostrada.it...

E come hai fatto a crearlo il file (con che utility, con che metodo)?
Ciao
--
Timothy Redaelli
timothy.redae...@email.it
------------------------------------------------------------------
Togliere NONSPAMMARE per rispondere
P.S. Scusate l'OT

 per recuperare la dimensione dei files.
Dim fso As FileSystemObject
Dim f As File
Set fso = New FileSystemObject
Set f = fso.GetFile("Percorso_del_file")
MsgBox f.Size
Ciao.

 metodo)?
Private Declare Function CreateFile Lib "kernel32" Alias
"CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As
Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long,
ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As
Long, ByVal hTemplateFile As Long) As Long
Private Declare Function DeviceIoControl Lib "kernel32" (ByVal
hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any,
ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal
nOutBufferSize As Long, lpBytesReturned As Long, ByVal lpOverlapped
As Long) As Long
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile
As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As
Long, ByVal dwMoveMethod As Long) As Long
Private Declare Function SetEndOfFile Lib "kernel32" (ByVal hFile As
Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject
As Long) As Long
Private Const GENERIC_WRITE = &H40000000
Private Const CREATE_ALWAYS = 2
Private Const FILE_BEGIN = 0
Private Const FSCTL_SET_SPARSE = 590020
Questo e' il codice per creare un file di 12 TB (solo per Win2000):
h = CreateFile("C:\pippo.txt", GENERIC_WRITE, 0, 0, CREATE_ALWAYS,
0, 0)
Call DeviceIoControl(h, FSCTL_SET_SPARSE, ByVal 0&, 0, ByVal 0&, 0,
dw, ByVal 0&)
ldist = 3072
Call SetFilePointer(h, 0, ldist, FILE_BEGIN) 'il primo ed il secondo
parametro di questa funzione servono per impostare la dimensione del
file
Call SetEndOfFile(h)
Call CloseHandle(h)
Ciao.

 Private Declare Function CreateFile Lib "kernel32" Alias
[CUT]
Grazie Mille
