Newsgroup: it.comp.appl.access
Titolo: Problemi con FileLen

Salve a tutti, sono nuovo da queste parti, quindi scusate se scrivo
strafalcioni o cavolate e non esitate a correggermi! ;-)
Per arrivare subito al problema, utilizzando la funzione
--->    FileLen(nomepercorso)   <---
su file di dimensioni maggiori di 2GB, mi restituisce dei valori
errati, addirittura a volte negativi.
C'è qualche metodo alternativo per conoscere le dimensioni di un file
di grandi dimensioni? Ho già provato a guardare su SitoComune, ma non
ho trovato niente.
Ciao e grazie

 ha scritto nel messaggio 
news:1141941941....@u72g2000cwu.googlegroups.com...



Ciao e grazie
[risposta]
Strano comportamento...a me funziona benissimo su qualsiasi file.
FileLen restituisce un valore long (compreso tra -2.147.483.648 e 
2.147.483.647)... sei sicuro di non aver assegnato la funzione ad una 
variabile di tipo integer?
Ciao, Carlo

Carlo Costarella ha scritto:

Hai provato anche con file molto grandi? Tipo immagini ISO di DVD, per
esempio?
Non assegno il valore generato da filelen ad una variabile, ma lo
utilizzo in una stringa di una msbgox, ad esempio:
msgbox "Il file pippo.pip ha le seguenti dimensioni: " &
FileLen("C:\DATI\pippo.pip") / 1024 / 1024 & "MB"
Ho letto da qualche parte che ci dovrebbe essere una chiamata API del
tipo GetFileSize, ma non so come reperirla e farla funzionare.....
Ciao

tipo GetFileSize, ma non so come reperirla e farla funzionare.....
API GetFileSize
Ciao, Carlo

Sono troppo un niubbo: cosa faccio con API GetFileSize? Lo inserisco in
un modulo? Come richiamo la funzione nel codice? :-?
Ah, mi ero dimenticato, uso Access 97.
Ciao e grazie

 ha scritto nel messaggio 
news:1141990384.3...@z34g2000cwc.googlegroups.com...

Questo un esempio:
In un modulo pubblico:
Public Const OF_READ = &H0&
Public Declare Function lOpen Lib "kernel32" Alias "_lopen" (ByVal 
lpPathName As String, ByVal iReadWrite As Long) As Long
Public Declare Function lclose Lib "kernel32" Alias "_lclose" (ByVal hFile 
As Long) As Long
Public Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, 
lpFileSizeHigh As Long) As Long
Dim lpFSHigh As Long
Public Sub GetInfoF(FilePath As String)
    Dim Pointer As Long, sizeofthefile As Long
    Pointer = lOpen(FilePath, OF_READ)
    sizeofthefile = GetFileSize(Pointer, lpFSHigh)
msgbox "Il file pippo.pip ha le seguenti dimensioni: " & sizeofthefile / 
1024 & "MB"
'Debug.Print sizeofthefile & " bytes"
    lclose Pointer
End Sub
Alla sub GetInfoF devi passare il percorso del file:
GetInfoF("C:\TuoFile.iso")
Ciao, Carlo

Niente da fare, anche con GetFileSize ho lo stesso problema:
un file ISO da 4.656.709.632 byte viene letto come da 361.742.336 byte
un file ISO da 4.367.581.184 byte viene letto come da 72.613.888 byte
un file ISO da 3.961.810.944 byte viene letto come da -333.156.352 byte
??????
Help!
Ciao e grazie a Carlo per la pazienza

 ha scritto nel messaggio 
news:1142082733.7...@j52g2000cwj.googlegroups.com...

Qui ci vogliono le maniere dure.
Spero tu non abbia w98 o ME. Se č cosě prova questo:
Const GENERIC_READ = &H80000000
Const FILE_SHARE_READ = &H1
Const OPEN_EXISTING = 3
Const FILE_TYPE_CHAR = &H2
Const FILE_TYPE_DISK = &H1
Const FILE_TYPE_PIPE = &H3
Const FILE_TYPE_UNKNOWN = &H0
Public Declare Function GetFileType Lib "kernel32" (ByVal hFile As Long) As 
Long
Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal 
lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As 
Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, 
ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Public Declare Function GetFileSizeEx Lib "kernel32" (ByVal hFile As Long, 
lpFileSize As Currency) As Boolean
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) 
As Long
Public Sub DimmiGrandezzaFile(Percorso As String)
    Dim hFile As Long, nSize As Currency
    'Apre il file
    hFile = CreateFile(Percorso, GENERIC_READ, FILE_SHARE_READ, ByVal 0&, 
OPEN_EXISTING, ByVal 0&, ByVal 0&)
    'ricava la sua dimensione
    GetFileSizeEx hFile, nSize
    'chiude il file
    CloseHandle hFile
    MsgBox "Dimensione: " + Str$(nSize * 10000) + " bytes"
End Sub
Ciao, Carlo 

Funziona!!!
Grazie, grande Carlo!
Ciao