ID3 тег в VB.net - PullRequest
       10

ID3 тег в VB.net

1 голос
/ 25 февраля 2012

Может кто-нибудь сказать мне, что не так со следующим кодом?

    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 я получаю:

Была предпринята попытка переместить указатель файла перед началом файла.

Ответы [ 2 ]

2 голосов
/ 15 августа 2012

Вы действительно должны изучить использование 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

NuGet-дистрибутив taglib-sharp можно найти в http://nuget.org/packages/taglib. Официальный репозиторий исходного кода находится в https://github.com/mono/taglib-sharp.

1 голос
/ 25 февраля 2012

Полагаю, ваш файл имеет длину менее 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, просто чтобы убедиться, что я не легкомыслен, он извлек название песни. Я хотел бы повторить, что вам нужно проверить длину вашего потока перед тем, как начать поиск. Например, длина песни, которую я использовал, была 8414449.

...