2010-03-16 12 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.

Powiązane problemy