Visual Basic 10, AVI Tags auslesen

  • .NET 4.5
  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Visual Basic 10, AVI Tags auslesen

    Hallo zusammen,

    ich habe den Pfad und den Dateinamen als String gegeben und suche eine Methode um von diesem File die TAGS auszulesen.

    Ich habe hier bereits einiges gefunden, habe jedoch Probleme den Pfad bzw. den Dateinamen einzubinden, da dort der Zugriff auf die Datei über einen Dialog passiert.

    Wer kann einem absoluten Neuling helfen?

    Thread verschoben ~ EaranMaleasi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EaranMaleasi“ ()

    Willkommen im Forum @Roland

    bitte achte in Zukunft darauf wo du deine Beiträge erstellst. Der Bereich Tipps&Tricks ist dazu da sein Wissen mit anderen zu Teilen, und nicht um Fragen zu stellen.
    Hierfür steht der Bereich Programmierung mit seinen verschiedenen Unterbereichen zur Verfügung.

    Ich habe daher deinen Post nach Multimedia- und Spieleprogrammierung verschoben.
    SIMDoku (Simple Dokumentenverwaltung)
    Mein Lernprojekt um die verschiedensten Facetten der .NET Entwicklung zu erkunden.
    GitHub

    VB Paradise Dark Theme
    Inoffizieller VB-Paradise Discord.
    @Roland Willkommen im Forum. :thumbup:
    Wo genau liegt das Problem? Wie sieht Dein bisheriger Code aus?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. Dim ofd As New OpenFileDialog
    5. Dim itm As ListViewItem
    6. Dim a, b, c As String
    7. Dim sPath As String
    8. Dim FolderBrowser As New FolderBrowserDialog
    9. FolderBrowser.Description = "Bitte wählen ..."
    10. FolderBrowser.ShowNewFolderButton = True
    11. FolderBrowser.RootFolder = System.Environment.SpecialFolder.Desktop
    12. FolderBrowser.SelectedPath = My.Computer.FileSystem.SpecialDirectories.Desktop
    13. If FolderBrowser.ShowDialog = Windows.Forms.DialogResult.OK Then
    14. sPath = FolderBrowser.SelectedPath
    15. End If
    16. Dim oDir As New System.IO.DirectoryInfo(sPath)
    17. Dim oFiles As System.IO.FileInfo() = oDir.GetFiles()
    18. Dim oFile As System.IO.FileInfo
    19. Dim Shell As New Shell32.Shell
    20. Dim Folder As Shell32.Folder = Shell.NameSpace(sPath)
    21. For Each oFile In oFiles
    22. Me.DataGridView1.Rows.Add(oFile.Name, a, b, c)
    23. Next
    24. 'If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
    25. ' Dim Shell As New Shell32.Shell
    26. ' Dim Folder As Shell32.Folder = Shell.NameSpace(Path.GetDirectoryName(ofd.FileName))
    27. ' Dim FolderItem As Shell32.FolderItem = Folder.ParseName(Path.GetFileName(ofd.FileName))
    28. ' For i = 0 To 500
    29. ' Application.DoEvents()
    30. ' a = i
    31. ' b = Folder.GetDetailsOf("", i)
    32. ' c = Folder.GetDetailsOf(FolderItem, i)
    33. ' itm = New ListViewItem(a)
    34. ' itm.SubItems.Add(b)
    35. ' itm.SubItems.Add(c)
    36. ' ListView1.Items.Add(itm)
    37. ' Next i
    38. 'End If
    39. End Sub
    40. End Class


    @RadFromGermany danke für Deine schnelle Antwort und Frage.

    Ich habe zuerst mit dem Abschnitt angefangen, welcher derzeit auskommentiert ist. Diese ließt die TAGS eines AVIs korrekt aus und schreibt diese in eine LiustView. Dort war mein Problem, das ich eine Datei, über den entsprechenden Dialog, auswählen musste.

    In den oberen Teil (der nicht auskommentiert ist), habe ich es hinbekommen die Dateien eines Ordners auszulesen und diese in die erste Spalte eines Grid zu schreiben.

    In den folgenden Spalten des Grid sollen nun die TAGs der AVIs eingetragen werden. Wobei die ID Nummern der einzelenn Einträge auswählbar sein sollen.

    Mein Problem ist also: Wie verbinde ich den ersten und den zweiten Teil miteinander bzw. wie übergebe ich die einzelnen Dateinamen, aus dem ausgewählten Ordner, in den unteren Teil.
    Die mit der ID 1 bis ID 360

    (siehe Bereich der auskommentiert ist)

    In letzter Konsequenz ist das aber auch irrelevant!

    Meine Eigentliche Fragestellung lautet: Wie binde ich den ausskommentierten Bereich in den oberen Programmbereich ein. Es liegt der Pfad und der Dateiname vor. Wie und wo muss ich diesen im unteren Bereich einbinden?
    @Roland Zunächst musst Du die Shell.dll als Verweis importieren:
    Projekt-Eigenschaften => Verwseis => Hinzufügen
    Reiter COM => Microsoft Shel Controls und Automation
    Dann räumen wir Dein Projekt gleich mal auf und Du kannst Dich nun um das Wesentliche kümmern:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. Using dlg = New OpenFileDialog
    5. dlg.Filter = "AVI|*.avi|All Files|*.*"
    6. dlg.Multiselect = True
    7. If dlg.ShowDialog() <> DialogResult.OK Then
    8. Return
    9. End If
    10. For Each file In dlg.FileNames
    11. DumpFile(file)
    12. Next
    13. End Using
    14. End Sub
    15. Private Sub DumpFile(file As String)
    16. Dim Shell As New Shell32.Shell
    17. Dim Folder As Shell32.Folder = Shell.NameSpace(Path.GetDirectoryName(file))
    18. Dim FolderItem As Shell32.FolderItem = Folder.ParseName(Path.GetFileName(file))
    19. ' Hier kannst Du tun was zu tun ist
    20. End Sub
    21. End Class
    Allerdings kann dieser Code nichs was nicht auch in der System.IO.FileInfo-Klasse steckt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Moin ;-),

    die Shell.dll hatte ich bereits eingebunden. Beide Abschnitte waren für sich komplett funktionsfähig.

    Herzlichen Dank, für das aufräumen. Ich werde es heute Abend testen und ein Feedback geben.

    Nochmals Danke1



    Super! Es funktioniert ;) Danke!

    Eine Frage hätte ich noch ;)

    Wie kann ich die Anzahl der ausgewählten Dateien ermitteln?

    Mein folgender Ansatz funktioniert leider nicht:

    VB.NET-Quellcode

    1. MsgBox(dgl.SelectedItems.Count)




    Selber gelöst ;)

    VB.NET-Quellcode

    1. msgbox(dlg.FileNames.Count)


    Beiträge zusammengefügt. Für nachträgliche Informationen bitte „Bearbeiten“! ~Thunderbolt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

    Roland schrieb:

    VB.NET-Quellcode

    1. msgbox(dlg.FileNames.Count)
    What :?:
    Fang an mit Option Strict On.
    Visual Studio - Empfohlene Einstellungen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Klar geht das, zeigt aber, dass Du Option Strict Off arbeitest, was ein Zeichen für unsauberes Arbeiten ist. Aktiviere es, beseitige den Microsoft.VisualBasic-Namespace (denn beides sind nur Übergangslösungen für VB6-Programmierer) und dann schauen wir mal, wieviele Fehler Dein Programm plötzlich aufweist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Es geht nicht darum, die Anzahl sauber zu ermitteln. Das hast Du bereits. Daran gibt es nichts auszusetzen. Aber

    Roland schrieb:

    msgbox(dlg.FileNames.Count)
    ist doppelt unsauber. MsgBox ist VB6, und Option Strict Off ist es deshalb, weil die MessageBox einen String, also einen Text fordert. Du wirfst ihr aber eine Zahl hin. Das ist das Problem. Welches aber schon in Post#11 beschrieben wurde. Wenn auch nicht so deutlich wie es anscheinend hier nötig ist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Nur um das klarzustellen: Allein die Tatsache, dass der Code bei Dir funktioniert, ist ein Alarmzeichen. Probier mal den Inhalt aus Post#11 bzw. für den Anfang zumindest die Teile, die ich in Post#15 genannt habe, aus.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Roland schrieb:

    Dort gilt:
    Da wirst Du hier permanent Schelte bekommen. :whistling:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!

    Roland schrieb:

    Ich komme aus dem medizinischen Sektor. Dort gilt: Wer heilt hat recht
    Diese Erfahrung habe ich auch schon gemacht.
    Manche Ärzte vernachlässigen die Sicherheitsregeln, die von den Richtlinien vorgegeben werden.
    Wenn alles gut geht, sieht man eh keinen Unterschied.
    Und wenn's schief geht, muss man erst mal den Kunstfehler nachweisen.

    Wenn du nicht leichtsinnig operieren willst:
    Option Strict On
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --