Hallo miteinander,
ich habe zwei Methoden geschrieben, eine um die Metadaten von mp3s auszulesen und in Textdateien zu schreiben, die andere um diese Daten dann von der Platte in eine Klasse zu laden und dann in Listboxes anzuzeigen. Die erste ruft an ihrem Ende die zweite auf. Das funktioniert auch ganz gut so weit, bloss wenn ich während das Programm ausführe das Ganze ein zweites mal ausführe, kommt es zum Fehler "System.ArgumentOutOfRangeException: Der Index lag außerhalb des Bereichs. Er darf nicht negativ und kleiner als die Sammlung sein." in Zeile 78.
Ich habs schon mit Content.Clear, bevor ich die zweite Methode ausführe versucht, kein Erfolg..
Hier mein Code:
ich habe zwei Methoden geschrieben, eine um die Metadaten von mp3s auszulesen und in Textdateien zu schreiben, die andere um diese Daten dann von der Platte in eine Klasse zu laden und dann in Listboxes anzuzeigen. Die erste ruft an ihrem Ende die zweite auf. Das funktioniert auch ganz gut so weit, bloss wenn ich während das Programm ausführe das Ganze ein zweites mal ausführe, kommt es zum Fehler "System.ArgumentOutOfRangeException: Der Index lag außerhalb des Bereichs. Er darf nicht negativ und kleiner als die Sammlung sein." in Zeile 78.
Ich habs schon mit Content.Clear, bevor ich die zweite Methode ausführe versucht, kein Erfolg..
Hier mein Code:
VB.NET-Quellcode
- Private Sub MusikbibliothekAktualisieren()
- If MessageBox.Show("Dieser Befehl löscht die Musikdatenbank dieses Programms und durchsucht den angegebenen Ordner nach neuen MP3s. Dieser Vorgang kann eine Weile dauern. Möchtest du fortfahren?", "Aktualisierung der Datenbank", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
- FolderBrowserDialog1.ShowDialog()
- Dim mp3Path As String = FolderBrowserDialog1.SelectedPath
- If System.IO.File.Exists(Anwendungspfad & "\Tracknummern.txt") Then System.IO.File.Delete(Anwendungspfad & "\Tracknummern.txt")
- If System.IO.File.Exists(Anwendungspfad & "\Dateinamen.txt") Then System.IO.File.Delete(Anwendungspfad & "\Dateinamen.txt")
- If System.IO.File.Exists(Anwendungspfad & "\Interpreten.txt") Then System.IO.File.Delete(Anwendungspfad & "\Interpreten.txt")
- If System.IO.File.Exists(Anwendungspfad & "\Alben.txt") Then System.IO.File.Delete(Anwendungspfad & "\Alben.txt")
- If System.IO.File.Exists(Anwendungspfad & "\Musiktitel.txt") Then System.IO.File.Delete(Anwendungspfad & "\Musiktitel.txt")
- If System.IO.Directory.Exists(mp3Path) = True Then
- SplashScreen.ProgressBar1.Minimum = 0
- Dim Maximum As Integer = My.Computer.FileSystem.GetFiles(mp3Path, FileIO.SearchOption.SearchAllSubDirectories, "*mp3").Count
- SplashScreen.ProgressBar1.Maximum = Maximum
- SplashScreen.ProgressBar1.Value = 0
- Me.Enabled = False
- SplashScreen.Label1.Text = "Aktualisieren der Musikdatenbank..."
- SplashScreen.Show()
- For Each foundfile As String In My.Computer.FileSystem.GetFiles(mp3Path, FileIO.SearchOption.SearchAllSubDirectories, "*mp3")
- Dim FileMp3WithPath = foundfile
- m_UltraID3 = New UltraID3
- m_UltraID3.Read(FileMp3WithPath)
- If m_UltraID3.Artist = "" Or m_UltraID3.Album = "" Or m_UltraID3.Title = "" Then
- LeereID3 = LeereID3 + 1
- SplashScreen.ProgressBar1.Value = SplashScreen.ProgressBar1.Value + 1
- Else
- System.IO.File.AppendAllText(Anwendungspfad & "\Dateinamen.txt", foundfile & Environment.NewLine)
- Dim Tracknummer As String = CStr(m_UltraID3.TrackNum)
- If Tracknummer.Length < 2 Then
- Tracknummer = "0" & Tracknummer
- End If
- System.IO.File.AppendAllText(Anwendungspfad & "\Tracknummern.txt", Tracknummer & Environment.NewLine)
- System.IO.File.AppendAllText(Anwendungspfad & "\Interpreten.txt", m_UltraID3.Artist & Environment.NewLine)
- System.IO.File.AppendAllText(Anwendungspfad & "\Alben.txt", m_UltraID3.Album & Environment.NewLine)
- System.IO.File.AppendAllText(Anwendungspfad & "\Musiktitel.txt", m_UltraID3.Title & Environment.NewLine)
- SplashScreen.ProgressBar1.Value = SplashScreen.ProgressBar1.Value + 1
- If SplashScreen.ProgressBar1.Value = Maximum Then
- SplashScreen.Hide()
- Me.Enabled = True
- Me.BringToFront()
- Me.Focus()
- End If
- End If
- Next
- If LeereID3 > 0 Then MessageBox.Show("Es sind " & CStr(LeereID3) & " MP3s ohne ausreichende Metadaten gefunden worden. Diese wurden übersprungen. Um alle MP3s in die Datenbank zu laden, füge bitte mindestens Interpret, Album und Musiktitel hinzu, z.B. mit dem Programm MP3Tag, das kostenlos im Internet zu haben ist. Die Metadaten müssen als ID3v2.3 vorhanden sein, andere werden leider noch nicht unterstützt")
- End If
- Else
- MessageBox.Show("Bitte wähle einen gültigen Ordner aus!")
- End If
- MusikdatenbankInKlassenLaden()
- End Sub
- Private Sub MusikdatenbankInKlassenLaden()
- If System.IO.File.Exists(Anwendungspfad & "\Dateinamen.txt") Then
- Content = New List(Of ClassMP3Datei)
- URLs = New List(Of ClassSender)
- listAlleDateinamen.AddRange(IO.File.ReadAllLines(Anwendungspfad & "\Dateinamen.txt"))
- listAlleTracknummern.AddRange(IO.File.ReadAllLines(Anwendungspfad & "\Tracknummern.txt"))
- listAlleInterpreten.AddRange(IO.File.ReadAllLines(Anwendungspfad & "\Interpreten.txt"))
- listAlleAlben.AddRange(IO.File.ReadAllLines(Anwendungspfad & "\Alben.txt"))
- listAlleMusiktitel.AddRange(IO.File.ReadAllLines(Anwendungspfad & "\Musiktitel.txt"))
- For i = 0 To listAlleDateinamen.Count() - 1
- mp3 = New ClassMP3Datei(listAlleDateinamen(i), listAlleTracknummern(i), listAlleInterpreten(i), listAlleAlben(i), listAlleMusiktitel(i))
- Content.Add(mp3)
- Next
- ListenFüllen()
- Else
- MessageBox.Show("Du musst zuerst eine Musikdatenbank anlegen. Bitte wähle dazu im folgenden Dialog den Ordner mit deinen MP3-Dateien aus!")
- MusikbibliothekAktualisieren()
- End If
- End Sub
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „kafffee“ ()