GetFullpath verweist auf Debug Ordner und nicht auf Pfad zur Datei

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Kaypetri.

    GetFullpath verweist auf Debug Ordner und nicht auf Pfad zur Datei

    Hallo Leute.

    jetzt ist es mir fast peinlich das ich so viele Themen hier aufmachen muss. Das Projekt wird etwas umfangreicher als ich dachte.
    Ich habe also nun eine Listview mit entsprechend aufgelisteten Files.
    Jetzt möchte ich mit einem ausgewählten file etwas machen. Dazu benötige ich den Pfad wo das aufgelistete File liegt.
    Das Problem daran ist dass er den Pfad zwar kennt, aber immer meinen Projektpfad zwischen Filename und den eigentlichen Pfad macht.
    Also gehen wir davon aus die Datei liegt auf dem Desktop und meine Projektdaten aus denen ich arbeite und debugge auch auf den Desktop jedoch in einem Ordner. Der Pfad der mir ausgespuckt wird lautet dann im Programm leider so:

    C:\User\XY\Desktop\VBProj\VBProj1\bin\Debug\File1.xxx

    Die Datei jedoch liegt in Wirklichkeit hier:

    C:\User\XY\Desktop\File1.xxx

    VB.NET-Quellcode

    1. For Each file As ListViewItem In ListView2.Items
    2. fullPath = Path.GetFullPath(file.SubItems(0).Text)



    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Kaypetri“ ()

    Kaypetri schrieb:

    Die Datei jedoch liegt in Wirklichkeit hier
    Mit welchem Code fütterst Du die Items?
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Als Clone von LV1. Und dort hole ich mir das via Treview. Siehe anderes Thema von mir.
    Der Aufruf Fullpath holt sich auf jeden Fall den korrekten Ort. Jedoch eben nicht nur diesen Pfad.

    VB.NET-Quellcode

    1. ​If ListView1.CheckedItems.Count > 0 Then
    2. For i As Integer = 0 To ListView1.CheckedItems.Count - 1
    3. lvi = ListView1.CheckedItems(i)
    4. lvi2 = CType(lvi.Clone, ListViewItem)
    5. If ListView2.Items.Count = 0 Then
    6. ListView2.Items.Add(lvi2)
    7. Else
    8. Dim item1 As ListViewItem = ListView2.FindItemWithText(lvi.Text)
    9. If (item1 IsNot Nothing) Then
    10. treffer = True
    11. Else
    12. End If
    13. If treffer = True Then
    14. Else
    15. ListView2.Items.Add(lvi2)
    16. End If
    17. End If
    18. Next
    19. End If

    Kaypetri schrieb:

    Als Clone von LV1.
    Wie befüllst Du die Primäritems mit der Pfadinformation?
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Verbesserungsvorschläge

    Kürzere Variante:

    VB.NET-Quellcode

    1. If ListView2.FindItemWithText(lvi.Text) = Nothing Then
    2. ListView2.Items.Add(lvi2)
    3. End If


    VB.NET-Quellcode

    1. For Each file As ListViewItem In ListView2.Items
    2. fullPath = Path.GetFullPath(file.SubItems(0).Text) ' SubItems(0).text = item.text


    Verbesserung:

    VB.NET-Quellcode

    1. Dim fiCurFile As System.IO.FileInfo
    2. For Each file As ListViewItem In ListView2.Items
    3. fiCurFile = New IO.FileInfo(file.Text)
    4. Next



    Interesant wäre nun was, bzw. wie der Text des ListViewItems aussieht.
    Ha. Neuer Tag neues Glück. Jetzt habe ich den Fehler doch noch gefunden. Ich frage ja die FileInfo über die Subitems ab bzw. lege diese fest. Ich habe jetzt einfach das SubItem mit FULLNAME erweitert und hole mir diese Information dann.
    Danke für eure Infos. Das hat mich irgendwie auf die Richtige Spur gebracht.

    Abfrage der Folder:

    VB.NET-Quellcode

    1. Private Sub treeView1_NodeMouseClick(ByVal sender As Object, ByVal e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
    2. Dim newSelected As TreeNode = e.Node
    3. ListView1.Items.Clear()
    4. Dim nodeDirInfo As DirectoryInfo = CType(newSelected.Tag, DirectoryInfo)
    5. Dim subItems() As ListViewItem.ListViewSubItem
    6. Dim item As ListViewItem = Nothing
    7. Dim dir As DirectoryInfo
    8. For Each dir In nodeDirInfo.GetDirectories()
    9. item = New ListViewItem(dir.Name, 0)
    10. subItems = New ListViewItem.ListViewSubItem() _
    11. {New ListViewItem.ListViewSubItem(item, "Directory"),
    12. New ListViewItem.ListViewSubItem(item, ""),
    13. New ListViewItem.ListViewSubItem(item,
    14. dir.LastAccessTime.ToShortDateString())}
    15. item.SubItems.AddRange(subItems)
    16. ListView1.Items.Add(item)
    17. Next dir
    18. Dim file As FileInfo
    19. For Each file In nodeDirInfo.GetFiles()
    20. Select Case file.Extension.ToLower
    21. Case ".jpg" ', ".jpg" ' File Extension Filter
    22. item = New ListViewItem(file.Name, 1)
    23. subItems = New ListViewItem.ListViewSubItem() _
    24. {New ListViewItem.ListViewSubItem(item, file.Extension),
    25. New ListViewItem.ListViewSubItem(item, file.Length),
    26. New ListViewItem.ListViewSubItem(item,
    27. file.LastAccessTime.ToShortDateString()),
    28. New ListViewItem.ListViewSubItem(item, file.FullName)} 'RootPfad zur Datei
    29. item.SubItems.AddRange(subItems)
    30. ListView1.Items.Add(item)
    31. 'Add File Item Icon
    32. If Not ImageList1.Images.ContainsKey(item.Name) Then
    33. ImageList1.Images.Add(file.Name, Icon.ExtractAssociatedIcon(file.FullName))
    34. End If
    35. item.ImageKey = file.Name ' Icon zuweisen
    36. 'Add File Item Icon
    37. End Select
    38. Next file
    39. ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)
    40. End Sub


    Aufruf Pfad aus LV2:

    VB.NET-Quellcode

    1. ​For Each file As ListViewItem In ListView2.Items
    2. ' MsgBox("0 " & file.SubItems(0).Text) ' filename.ext
    3. 'MsgBox("1 " & file.SubItems(1).Text) '.ext
    4. 'MsgBox("2 " & file.SubItems(2).Text) 'Size
    5. 'MsgBox("3 " & file.SubItems(3).Text) 'Last Modified
    6. 'MsgBox("4 " & file.SubItems4).Text) 'Root Pfad zur Datei
    7. fullPath = Path.GetFullPath(file.SubItems(4).Text)
    8. MsgBox(fullPath)



    Bilder
    • App 2016.png

      51,98 kB, 902×610, 133 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Kaypetri“ ()