2

我已将原始数据(十六进制字符)写入文本文件。我想在文本字符串 MP3 启动到 mp3 结束后检索以原始数据形式存储在此文本文件中的 mp3 信息。我已完成此操作但现在出现问题文本是否包含许多 mp3 开始和 mp3end 字符串,其中 mp3 字符可用。我的程序只是提取第一个 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)

但是,如果文件非常大,您可能不想一次将整个文件全部加载到内存中。在这种情况下,最好一次读取一个段,然后在循环中将每个段附加到一个单独的新文件中。然后,当您完成将所有所需数据复制到新文件时,您需要重命名它以覆盖原始文件。例如,像这样:

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 回答