【问题标题】:ID3 tag in VB.netVB.net 中的 ID3 标签
【发布时间】:2012-02-25 10:59:46
【问题描述】:

谁能告诉我下面的代码有什么问题?

    Dim mp As FileStream
    Dim Title(30) As Byte
    mp = New FileStream(My.Computer.FileSystem.SpecialDirectories.MyMusic & "\Set List Planner\Tracks" & filename, FileMode.Open)
    mp.Seek(-125, SeekOrigin.End)
    mp.Read(Title, 0, 30)

    Me.songName = System.Text.Encoding.ASCII.GetString(Title)

在第 4 行我不断得到:

试图将文件指针移动到文件开头之前。

【问题讨论】:

    标签: vb.net filestream id3


    【解决方案1】:

    我的猜测是您的文件长度小于 125 字节。您正在尝试将流位置移动到文件结束之前 125 个字节。在尝试移动您的流位置之前,我会检查文件的Length。如:

    Dim mp As FileStream
    Dim Title(30) As Byte
    mp = New FileStream(My.Computer.FileSystem.SpecialDirectories.MyMusic & "\Set List Planner\Tracks" & filename, FileMode.Open)
    If mp.Length >= 125 Then
        mp.Seek(-125, SeekOrigin.End)
        mp.Read(Title, 0, 30)
        Me.songName = System.Text.Encoding.ASCII.GetString(Title)
    End If
    

    顺便说一句,我使用示例 Mp3 尝试了您的代码,以确保我没有轻率,它确实提取了歌曲的标题。我要重申,在进行 Seek 之前,您需要验证流的长度。比如我用的那首歌的长度是8414449。

    【讨论】:

      【解决方案2】:

      您确实应该考虑使用 TagLib# 来读取和写入 ID3 标签。然后就很简单了:

      Dim _MP3FilePath As String = My.Computer.FileSystem.SpecialDirectories.MyMusic & "\Set List Planner\Tracks" & filename
      Dim _MP3File As TagLib.File = TagLib.File.Create(_MP3FilePath)
      Me.songname = _MP3File.Tag.Title
      

      要引用 taglib sharp 库,您必须首先通过 NuGet 安装它。要安装 TagLib#,请在 Visual Studio 的包管理器控制台中运行以下命令。

      PM> Install-Package taglib
      

      taglib-sharp 的 NuGet 发行版可以在 http://nuget.org/packages/taglib 找到。官方源代码库位于https://github.com/mono/taglib-sharp

      【讨论】:

        猜你喜欢
        • 2015-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-01
        • 2012-05-03
        • 2015-07-21
        • 1970-01-01
        相关资源
        最近更新 更多