Looking for vba Answers? Try Ask4KnowledgeBase
Looking for vba Keywords? Try Ask4Keywords

VBALäser 2GB + filer i binär i VBA och File Hashes


Introduktion

Det finns ett inbyggt enkelt sätt att läsa filer i binär inom VBA, men det har en begränsning på 2 GB (2 147 483 647 byte - max av lång datatyp). När tekniken utvecklas bryts denna gräns på 2 GB lätt. t.ex. en ISO-bild av operativsystemets DVD-skiva. Microsoft tillhandahåller ett sätt att övervinna detta via Windows API på låg nivå och här är en säkerhetskopia av det.

Visa också (Läs del) för att beräkna File Hashes utan externt program som fciv.exe från Microsoft.

Anmärkningar

METODER FÖR KLASSEN AV MICROSOFT

Metodnamn Beskrivning
Är öppen Returnerar en boolean för att ange om filen är öppen.
OpenFile ( sFileNam e As String) Öppnar filen som anges av argumentet sFileName.
CloseFile Stänger den för närvarande öppna filen.
ReadBytes ( ByteCount As Long) Läser ByteCount-byte och returnerar dem i en Variant-byte-grupp och flyttar pekaren.
WritBytes ( DataBytes () som byte) Skriver innehållet i bitgruppen till den aktuella positionen i filen och flyttar pekaren.
Spola Tvingar Windows att spola skrivcachen.
SeekAbsolute ( HighPos As Long, LowPos As Long) Flyttar filpekaren till den angivna positionen från början av filen. Även om VBA behandlar DWORDS som signerade värden, behandlar API dem som osignerade. Gör argumentet med hög ordning utan noll att överstiga 4 GB. Dordordet med låg ordning är negativt för värden mellan 2 GB och 4 GB.
SeekRelative ( Offset As Long) Flyttar filpekaren upp till +/- 2 GB från den aktuella platsen. Du kan skriva om den här metoden för att möjliggöra förskjutningar större än 2 GB genom att konvertera en 64-bitars signerad offset till två 32-bitarsvärden.

EGENSKAPER AV KLASSEN AV MICROSOFT

Fast egendom Beskrivning
filehandle Filhandtaget för den för närvarande öppna filen. Detta är inte kompatibelt med VBA-filhandtag.
Filnamn Namnet på den för närvarande öppna filen.
AutoFlush Ställer in / indikerar om WritBytes automatiskt kommer att ringa Flush-metoden.

NORMAL MODUL

Fungera anteckningar
GetFileHash ( sFile As String, uBlockSize As Double, sHashType As String) Kasta helt enkelt in hela vägen som ska hashas, blockera storlek för att använda (antal byte) och typen av Hash som ska användas - en av de privata konstanterna: HashTypeMD5 , HashTypeSHA1 , HashTypeSHA256 , HashTypeSHA384 , HashTypeSHA512 . Detta utformades för att vara så generiskt som möjligt.

Du bör avinstallera / kommentera uFileSize As Double i enlighet därmed. Jag har testat MD5 och SHA1.

Läser 2GB + filer i binär i VBA och File Hashes Relaterade exempel