我正在编写一个差异程序,并根据两端的变化复制整个文件或段(Rsync-esque ......但更像是Unison)。主要想法是让我的音乐文件夹(所有mp3)在多个位置保持最新。
如果文件的一小部分已经更改,我想发送分段更新,而不是复制整个文件。为此,我需要一种方法来区分文件的片段。
我最初尝试为每个文件的块生成哈希值(每n个字节我都会对段进行哈希)。我注意到当我改变一个属性(mp3上的id3v2标签)时,所有的散列块都会改变。这是有道理的,因为我猜测标题在获取新信息时正在增长。
这引出了我的实际问题。我想知道如何确定mp3标题的长度,所以我可以创建2个可比较的哈希值。
1)文件的元信息(标题)
2)带有音频的实际mpeg流(如果我所做的只是更改标记信息,则此哈希值应保持不变)
我错过了什么吗?
谢谢!
泰
答案 0 :(得分:1)
如果您想确定标题信息,您可以:
答案 1 :(得分:1)
如果你只想查看id3v2标签的长度,那么你可以在http://www.id3.org/id3v2.4.0-structure找到有关其结构的信息。
如果读取前3个字节,它们等于“ID3”,则跳到第7个字节,然后读取标题大小。但要小心,因为大小存储为“synchsafe整数”。
答案 2 :(得分:0)
我使用TagLibSharp结束了。 developer.novell.com/wiki/index.php/TagLib_Sharp