2011-06-12 109 views
1

我正在做一个项目,在VB.NET 2005中,我必须提取mp3文件的标签信息。为此,我使用page中的代码。但问题是,当其中一个标签为空时,它没有返回任何值。阅读vb.net中的mp3标签信息

例如,使用这个我可以检索这样的专辑信息,

Dim album As String = "" 
    album = objMP3V1.Frame(MP3ID3v1.FrameTypes.Album) 

但我不知道如何检查专辑变量为空或没有,我查专辑变量

If (album = "") Then 
     MsgBox("true") 
    ElseIf (album Is Nothing) Then 
     MsgBox("true") 
    ElseIf (album Is DBNull.Value) Then 
     MsgBox("true") 
    End If 

但没有成功,有人可以帮助我。

+0

+1,我也有同样的问题 – Predator 2011-06-12 08:10:00

+0

链接的代码相当笨拙。使用如果album.Trim()=“”然后 – 2011-06-12 18:33:09

回答

0

我用正则表达式来解决这个问题。感谢您的帮助...

Imports System.Text.RegularExpressions 
dim RegEx As New RegularExpressions.Regex("^[a-zA-Z0-9]+$") 
dim Match As Match 
dim film as string 
film = song.Frame(MP3ID3v1.FrameTypes.Album) 
Match = RegEx.Match(film) 
film1 = IIf((Match.Success), film.ToString, "") 

如果你想找更专业的标签编辑这里的a link

3

ID3v1标签存储在文件的最后128个字节中。前三个字节是“TAG”,告诉文件存储标签。所以首先检查文件是否有标签,然后阅读它们。

我不知道VB的,但我认为阅读框架之前,你应该先:

  1. 打开文件Dim objMP3V1 As New MP3ID3v1("file_path")
  2. 测试,如果文件中有一个的ID3v1标签通过,如果objMP3V1.TagExists标志测试是真的
  3. 然后阅读字段/框架。

编辑

在链接的代码表示

FileGet(intFile, strTag, lngLOF - 127, True) 
     If (strTag.ToUpper <> "TAG") Then 

      ' No ID3v1 tag found 

      mblnTagExists = False 
      mobjFrame(0) = "" 
      mobjFrame(1) = "" 
      mobjFrame(2) = "" 
      mobjFrame(3) = "" 
      mobjFrame(4) = "" 
      mobjFrame(5) = "" 
      mobjFrame(6) = "" 

     Else 

      ' ID3v1 tag found 

      mblnTagExists = True 

      ' Read all frames from the file 

      FileGet(intFile, strTitle) 
      FileGet(intFile, strArtist) 
      FileGet(intFile, strAlbum) 
      FileGet(intFile, strYear) 
      FileGet(intFile, strComment) 
      FileGet(intFile, bytDummy) 
      FileGet(intFile, bytTrack) 
      FileGet(intFile, bytGenre) 

      ' Assign the frame content to the properties 

      mobjFrame(0) = strTitle 
      mobjFrame(1) = strArtist 
      mobjFrame(2) = strAlbum 
      mobjFrame(3) = strYear 
      mobjFrame(4) = bytTrack 
      mobjFrame(5) = strComment 
      mobjFrame(6) = bytGenre 

     End If 
    End If 

因此,如果标签不存在,那么它应该有""指定为字符串。

的ID3v1字段是固定长度的,所以如果有在album字段没有字符串,那么它应该含有一个NUM串,即,该字段的第一位置将包含一个空字符'\0',因此它会返回一个空字符串""。 我会告诉你在带有ID3v1标签的示例音乐文件上检查这一点。 (你甚至可以创建一个用ID3v1格式化的文本文件并测试它)。

+0

是的,我检查了标记存在的方法,它分配值,如果存在。但其中一个信息不像“专辑”那样可用,该变量没有保存任何值。我检查它是空的或不是,但它不空。所以我如何检查它是否包含信息... – VKGS 2011-06-12 06:59:50

+1

ID3v1中的字段是固定长度的字段,如果它不存在,它应该包含一个空字符串,即第一个位置将包含'\ 0 '字符。我不知道VB,但检查代码,我认为你应该检查返回值是否是“” – phoxis 2011-06-12 15:21:57