2

生データ(HEX文字)をテキストファイルに書き込んでしまいました。テキスト文字列MP3の開始からmp3終了まで、このテキストファイルに生データの形で保存されているmp3情報を取得したいです。テキストには、mp3 文字を使用できる多くの mp3 開始文字列と mp3end 文字列が含まれています。私のプログラムは、最初の mp3 開始文字列と mp3 終了文字列の間の文字を抽出するだけです。この情報を抽出した後、この情報をファイルから削除して、プログラムは、mp3 文字の次のセットを抽出できます。それを行う効率的な方法はありますか。私は vb.net に取り組んでいます。

4

1 に答える 1

0

場合によります。ファイル形式でアイテムを空白にして空白の「ページ」を残すことができる場合、それが最も効率的なオプションになります。ただし、実際にセクションを削除して、その後に続くすべてをシフトアップする必要がある場合は、ファイル全体を書き直すしかありません。

以下のコメントで、ファイル サイズを縮小するためにファイルの残りの部分を上に移動する必要があると述べたので、唯一のオプションはファイル全体を上書きすることです。コードの詳細を知らなければ、それを行う最善の方法を言うのは困難ですが、最も簡単な方法は次のようになります。

Dim bytes() As Byte = File.ReadAllBytes(filePath)
' Modify and resize the bytes array
File.WriteAllBytes(filePath)

ただし、ファイルが非常に大きい場合は、すべてを一度にメモリにロードしたくない場合があります。その場合は、一度に 1 つのセグメントを読み取り、各セグメントを別の新しいファイルにループで追加することをお勧めします。次に、必要なすべてのデータを新しいファイルにコピーしたら、名前を変更して元のファイルを上書きする必要があります。たとえば、次のようなものです。

Using input As New FileStream(inputFilePath, FileMode.Open)
    Using output As New FileStream(tempFilePath, FileMode.Create)
        Dim bytes(lengthOfMp3Record) As Byte
        Dim totalRead As Integer = 0
        Do
            totalRead = input.Read(bytes, 0, bytes.Length)
            If (totalRead <> 0) AndAlso (KeepMp3record(bytes)) Then
                output.Write(bytes, 0, totalRead)
            End If
        Loop While totalRead <> 0
    End Using
End Using
File.Delete(inputFilePath)
File.Move(tempFilePath, inputFilePath)
于 2012-09-26T12:18:34.510 に答える