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

戻る