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

VBAバイナリ形式で2GB +ファイルをVBAとファイルハッシュで読む


前書き

VBA内のバイナリファイルを簡単に読み込む方法は簡単ですが、2GB(2,147,483,647バイト - Longデータ型の最大値)の制限があります。テクノロジーが進化するにつれて、この2GBの制限は容易に破られます。オペレーティングシステムインストールDVDディスクのISOイメージなど)。マイクロソフトでは、低レベルのWindows APIを使用してこれを克服する方法を提供しています。ここではそのバックアップです。

また、Microsoftからfciv.exeような外部プログラムなしでファイルハッシュを計算するための(一部を読む)ことを実演してください。

備考

マイクロソフトのクラスのためのメソッド

メソッド名説明
IsOpen ファイルが開いているかどうかを示すブール値を返します。
OpenFile文字列としてのsFileNam sFileName引数で指定されたファイルを開きます。
CloseFile 現在開いているファイルを閉じます。
ReadBytesByteCount As Long) ByteCountバイトを読み取り、Variantバイト配列で返し、ポインタを移動します。
WriteBytes (ByteとしてのDataBytes()バイト配列の内容をファイルの現在の位置に書き込み、ポインタを移動します。
流す Windowsに強制的に書き込みキャッシュをフラッシュさせます。
SeekAbsoluteHighPos As Long、 LowPos As Long) ファイルポインタをファイルの先頭から指定された位置に移動します。 VBAはDWORDSを符号付きの値として扱いますが、APIはそれらを符号なしとして扱います。高次の引数をゼロ以外の値にして4GBを超えるようにします。下位DWORDは2GB〜4GBの間で負の値になります。
SeekRelativeオフセットは長く) ファイルポインタを現在の場所から+/- 2GBまで移動します。 64ビット符号付きオフセットを2つの32ビット値に変換することにより、このメソッドを2 GBを超えるオフセットに使用できるように書き直すことができます。

マイクロソフトのクラスのプロパティ

プロパティ説明
FileHandle 現在開いているファイルのファイルハンドル。これはVBAファイルハンドルと互換性がありません。
ファイル名 現在開いているファイルの名前。
オートフラッシュ WriteBytesが自動的にFlushメソッドを呼び出すかどうかを設定/示します。

ノーマルモジュール

関数ノート
GetFileHashsFileは文字列、 uBlockSizeは Double、 sHashTypeは文字列) HashTypeMD5HashTypeSHA1HashTypeSHA256HashTypeSHA384HashTypeSHA512のいずれかのプライベート定数の1つである、使用するハッシュのタイプ(バイト数)、使用するブロックサイズ 、ハッシュする完全パスを投げるだけです 。これは可能な限り一般的になるように設計されています。

それに応じてuFileSize As Doubleのコメントを解除する必要があります。私はMD5とSHA1をテストしました。

バイナリ形式で2GB +ファイルをVBAとファイルハッシュで読む 関連する例