2010-03-16 23 views

risposta

8

Ecco un modo, anche se si sono limitati a file con dimensioni di circa 2 GB.

Dim fileNum As Integer 
    Dim bytes() As Byte 

    fileNum = FreeFile 
    Open "C:\test.bin" For Binary As fileNum 
    ReDim bytes(LOF(fileNum) - 1) 
    Get fileNum, , bytes 
    Close fileNum 
+1

Perché loop? Appena 'Ottieni fileNum,, bytes' e velocizzalo 100x – wqw

+0

Su 'Ottieni fileNum,, i dati' ottengo un errore di run-time 458, la variabile utilizza un tipo di automazione non supportato in Visual Basic'. Qualche idea su cosa sta succedendo? Mi manca un riferimento bibliografico? – user2173353

+0

OK. Fatto! Cambiarlo in questo: 'ReDim bytes (1 To lenF) As Byte'. A quanto pare stavo usando Variant e non mi è piaciuto affatto ... – user2173353

5

È possibile confrontare questi due

Private Function ReadFile1(sFile As String) As Byte() 
    Dim nFile  As Integer 

    nFile = FreeFile 
    Open sFile For Input Access Read As #nFile 
    If LOF(nFile) > 0 Then 
     ReadFile1 = InputB(LOF(nFile), nFile) 
    End If 
    Close #nFile 
End Function 

Private Function ReadFile2(sFile As String) As Byte() 
    Dim nFile  As Integer 

    nFile = FreeFile 
    Open sFile For Binary Access Read As #nFile 
    If LOF(nFile) > 0 Then 
     ReDim ReadFile2(0 To LOF(nFile) - 1) 
     Get nFile, , ReadFile2 
    End If 
    Close #nFile 
End Function 

Io preferisco la seconda, ma ha questo effetto collaterale sgradevole. Se sFile non esiste, la modalità For Binary crea un file vuoto, indipendentemente dal fatto che sia utilizzato lo standard Access Read.

Problemi correlati