2010-03-16 5 views

Odpowiedz

8

Oto jeden ze sposobów, choć ograniczasz się do plików o rozmiarze około 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

Dlaczego pętla? Po prostu 'Get fileNum,, bytes' i przyspieszenie go 100x – wqw

+0

W' Get fileNum, data' otrzymuję 'Run-time Error 458, Variable używa typu Automation nieobsługiwanego w Visual Basic'. Masz pojęcie, co się dzieje? Czy brakuje mi odniesienia do biblioteki? – user2173353

+0

OK. Rozumiem! Zmień to na: 'ReDim bytes (1 To lenF) As Byte'. Najwyraźniej używałem Warianta i wcale mu się to nie podobało ... – user2173353

5

Można porównać te dwa

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 

wolę drugi, ale ma ten przykry efekt uboczny. Jeśli sFile nie istnieje, tryb For Binary tworzy pusty plik niezależnie od tego, czy jest używany Access Read.