在vb.net中读取文本文件后删除文本文件中的某些字节

时间:2012-09-26 12:13:04

标签: vb.net text-files

我已将原始数据(HEX字符)写入文本文件。我想在文本字符串MP3启动到mp3结束后检索此文本文件中以原始数据形式存储的mp3信息。我已完成此操作但是现在的问题是文本包含许多mp3开头和mp3end字符串之间的mp3字符可用。我的程序只是提取第一个mp3开始和mp3结束字符串之间的字符。在提取此信息后,我想从文件中删除此信息所以我的程序可以提取下一组mp3字符。有任何有效的方法来做它。我在vb.net上工作

1 个答案:

答案 0 :(得分: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)