FileReverse()
ファイルの内容をバイト単位で読み出し、それを逆から出力するファイル反転関数です。
用途ですか? …ごくごく単純な暗号化とその復号、ぐらいしか思いつきませんね(^^;
ちなみにこの関数を作った動機というのも、某所でゲットした怪しいファイルがこの手法で
細工してあり、復元ツールを探すのが面倒だったからというアレな理由だったりします。
なにか面白い用途があったら教えてください(^^;
'標準モジュールに記述します。 Option Explicit Public Sub FileReverse(strFileName As String, Optional blnBackup As Boolean = True) 'ファイルの内容をバイト単位で反転させます。 '<引数> ' strFileName : 対象となるファイル ' blnBackup : 処理前にバックアップを取るかどうか。 ' True を指定すると、同じパスに "ファイル名.bak" という名前でファイルを ' コピーしてから処理を行います。 ' 省略した時のデフォルト値は True です。 Dim intFileNo As Integer Dim bytReadBuf() As Byte Dim bytWriteBuf() As Byte Dim lngReadFileLen As Long Dim i As Long, j As Long 'ファイルの存在確認 If LenB(Dir$(strFileName)) = 0 Then MsgBox "ファイルが見つかりません。処理を中止します。", vbInformation Exit Sub End If '必要なら元ファイルのバックアップ If blnBackup Then FileCopy strFileName, strFileName & ".bak" 'ファイルの内容を取得 intFileNo = FreeFile() Open strFileName For Binary As #intFileNo lngReadFileLen = LOF(intFileNo) ReDim bytReadBuf(0 To lngReadFileLen - 1) As Byte Get #intFileNo, 1, bytReadBuf() Close #intFileNo '内容を反転コピー ReDim bytWriteBuf(0 To lngReadFileLen - 1) As Byte For i = 0 To lngReadFileLen - 1 j = lngReadFileLen - 1 - i bytWriteBuf(j) = bytReadBuf(i) Next '不要になったバッファの解放 Erase bytReadBuf 'ファイルに出力 intFileNo = FreeFile() Open strFileName For Binary As #intFileNo Put #intFileNo, , bytWriteBuf() Close #intFileNo End Sub
実行例:
'フォームにボタンを用意して、以下のプロシージャを記述します。 Private Sub Command1_Click() '「C:\Temp\test1.dat」の内容を反転させます。 Call FileReverse("C:\Temp\test1.dat", True) End Sub