将音乐从iPod传输到计算机上时,文件名采用“加密”字样。形成。我正在制作一个Visual Basic程序来浏览我复制到桌面上的音乐文件夹,并根据"标题"重命名曲目。从文件的细节。当我运行mp3
文件的代码时,它完美地运行。但是,当我在m4a
文件上运行时,我的代码的这一部分会出错。
Dim TitleFrame As String = "TIT2"
Dim foundFrame As String = ""
Dim index As Integer = -1
Do
index += 1
foundFrame = Chr(Data(index)) & Chr(Data(index + 1)) & Chr(Data(index + 2)) & Chr(Data(index + 3))
Loop Until foundFrame = TitleFrame
给出的错误是它表示数组超出范围,指的是以foundFrame = chr...
开头的行。我假设这是因为此m4a
文件类型的标题框架标识符与TIT2
不同。
请帮我匹配框架类型或者给我一个程序化的方法,不知道我正在寻找但仍然找到标题信息的框架类型。最好不要下载任何东西。
答案 0 :(得分:0)
如果它具有不同的帧标识符,请将Loop Until
语句更改为:
Loop Until foundFrame = TitleFrame Or index = String(Data).Length - TitleFrame.Length
或者,只有在数据包含字符串时才执行循环,如下所示:
If String(Data).Contains(TitleFrame) Then
' Loop through
End If
或者,为了加快速度,你可以取消循环,并使用它,如果数据包含Boolean
,则给出TIT2
值:
String(Data).Contains(TitleFrame)
这应该可以阻止例外。
假设我的数据等于此SHA-256十六进制哈希的字符串到文本Stack Overflow
:
185A76793EFF17B079F576328881972DABABED51764F1AB5AFED4C9ACEF64D55
请注意该字符串是如何包含TIT2
的。 If
语句应该立即捕获它,而不是查找TIT2
。
但是,我还想解释我对循环的更改。您会再次注意到,此字符串不包含TIT2
。执行将是这样的:
index ............. foundFrame
0 ................. 185A
1 ................. 85A7
2 ................. 5A76
... skipping through ...
59 ................ 64D5
60 ................ 4D55
结尾字符的索引是:
6 4 D 5 5
59 60 61 62 63
我们的长度与TitleFrame.Length
4
相同。index
。当59
为foundFrame
时,64D5
应为59
,索引60
,61
,62.
和{{1} }
如果它是60
,它会foundFrame
4D55
,索引60
,61
,62
和{{ 1}}。
这是循环应该结束的地方,以避免越界异常。如果我们在63
尝试index
,我们会得到61
,61
,62
和63
。 64
不存在且程序崩溃。
我可以使用64
,但我想使用String(Data).Length - 4
,以防您希望将TitleFrame.Length
修改为TitleFrame
以外的其他内容。< / p>