有人可以告诉我以下代码有什么问题吗?
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行,我一直得到:
尝试在文件开头之前移动文件指针。
答案 0 :(得分: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
可以在http://nuget.org/packages/taglib找到taglib-sharp的NuGet分布。官方源代码存储库位于https://github.com/mono/taglib-sharp。
答案 1 :(得分: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。