ListView Datei Anzeigen

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von guccini.

    ListView Datei Anzeigen

    Hallo zusammen,
    Versuche aus einen ordner alle text dateien in listview anzeigen zu lassen,
    es git nur zwei unterschiedliche text dateien ,
    in diese soll die erste kopfzeile ausgelesen werden aber erst nach 80 leerzeichen (Prog = Zeile1.Substring(80)) , klappt soweit .
    wenn aber eine text datei vorhanden ist die schon bei Substring(0) was drin steht dann kommt es zu einer Fehlermeldung "Ein Ausnahmefehler des Typs "System.ArgumentOutOfRangeException" ist in mscorlib.dll aufgetreten."
    Also wie kann man beide textdateien einlesen?
    Code:

    VB.NET-Quellcode

    1. ListView1.MultiSelect = False
    2. ListView1.View = View.Details
    3. ListView1.FullRowSelect = True
    4. ListView1.Items.Clear()
    5. ListView1.Columns.Clear()
    6. ListView1.Columns.Add("VollerDateiname", 0, HorizontalAlignment.Left)
    7. ListView1.Columns.Add("TNr.", 120, HorizontalAlignment.Left)
    8. ListView1.Columns.Add("PROGRAMMNAME.", 450, HorizontalAlignment.Left)
    9. ListView1.Columns.Add("Grösse", 80, HorizontalAlignment.Center)
    10. ListView1.Columns.Add("GEAEND. AM", 170, HorizontalAlignment.Center)
    11. ListView1.Columns.Add("ERSTELL. AM", -2, HorizontalAlignment.Center)
    12. If Not IO.Directory.Exists("C:\Test\") = False Then
    13. Dim dFolder As DirectoryInfo = New DirectoryInfo("C:\Test\")
    14. Dim fFile As FileInfo
    15. Dim Zeile1 As String
    16. Dim Prog As String
    17. For Each fFile In dFolder.GetFiles("*.*")
    18. With fFile
    19. Using fileReader As StreamReader = My.Computer.FileSystem.OpenTextFileReader(.FullName, System.Text.Encoding.Default)
    20. Zeile1 = fileReader.ReadLine().TrimStart(" ")
    21. End Using
    22. Prog = Zeile1.Substring(80)
    23. ListView1.Items.Add(New ListViewItem(New String() {.Name, .Name, Prog, (.Length / 1000).ToString("#0 KB "), .CreationTime.ToString, .LastWriteTime.ToString}))
    24. End With
    25. Next
    26. Return
    27. Else
    28. MsgBox("Daten nicht Vorhanden!", MsgBoxStyle.Critical, "Fehler")
    29. End If


    *Bitte nicht die Farbe Rot verwenden, siehe Regeln*

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Marcus Gräfe“ ()

    @guccini Mit welcher Datei (ggf. anhängen) kommt in welcher Zeile Deines Codes diese Fehlermeldung?
    Überlege Dir, warum das knallt und bau eine entsprechende If-Anweisung ein.
    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!
    es ist immer die erste Zeile
    habe das auch so versucht:

    VB.NET-Quellcode

    1. If Not IO.Directory.Exists(e.Node.FullPath) = False Then
    2. Dim dFolder As DirectoryInfo = New DirectoryInfo(e.Node.FullPath)
    3. Dim fFile As FileInfo
    4. Dim Zeile1 As String
    5. Dim Prog As String
    6. For Each fFile In dFolder.GetFiles("*.*")
    7. With fFile
    8. Using fileReader As StreamReader = My.Computer.FileSystem.OpenTextFileReader(.FullName, System.Text.Encoding.Default)
    9. Zeile1 = fileReader.ReadLine().TrimStart(" ")
    10. End Using
    11. If Prog = Zeile1.Substring(80) Then
    12. ListView1.Items.Add(New ListViewItem(New String() {.Name, .Name, Prog, (.Length / 1000).ToString("#0 KB "), .CreationTime.ToString, .LastWriteTime.ToString}))
    13. ElseIf Prog = Zeile1.Substring(0) Then
    14. ListView1.Items.Add(New ListViewItem(New String() {.Name, .Name, Prog, (.Length / 1000).ToString("#0 KB "), .CreationTime.ToString, .LastWriteTime.ToString}))
    15. End If
    16. End With
    17. Next
    18. Return
    19. Else
    20. MsgBox("Daten nicht Vorhanden!", MsgBoxStyle.Critical, "Fehler")
    21. End If

    guccini schrieb:

    es ist immer die erste Zeile
    Des Codes oder der Datei?
    Welche Codezeile wirft die Exception?
    =====

    guccini schrieb:

    VB.NET-Quellcode

    1. If Not IO.Directory.Exists(e.Node.FullPath) = False Then
    Was soll die "doppelte Verneinung"?
    Machst Du

    VB.NET-Quellcode

    1. If IO.Directory.Exists(e.Node.FullPath) Then

    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!
    es ist immer die erste Zeile der Datei
    sorry hab mich mit den code vertan

    VB.NET-Quellcode

    1. If Not IO.Directory.Exists("C:/Test") Then
    2. Dim dFolder As DirectoryInfo = New DirectoryInfo("C:/Test")
    3. Dim fFile As FileInfo
    4. Dim Zeile1 As String
    5. Dim Prog As String
    6. For Each fFile In dFolder.GetFiles("*.*")
    7. With fFile
    8. Using fileReader As StreamReader = My.Computer.FileSystem.OpenTextFileReader(.FullName, System.Text.Encoding.Default)
    9. Zeile1 = fileReader.ReadLine().TrimStart(" ")
    10. End Using
    11. If Prog = Zeile1.Substring(80) Then
    12. ListView1.Items.Add(New ListViewItem(New String() {.Name, .Name, Prog, (.Length / 1000).ToString("#0 KB "), .CreationTime.ToString, .LastWriteTime.ToString}))
    13. ElseIf Prog = Zeile1.Substring(0) Then
    14. ListView1.Items.Add(New ListViewItem(New String() {.Name, .Name, Prog, (.Length / 1000).ToString("#0 KB "), .CreationTime.ToString, .LastWriteTime.ToString}))
    15. End If
    16. End With
    17. Next
    18. Return
    19. Else
    20. MsgBox("Daten nicht Vorhanden!", MsgBoxStyle.Critical, "Fehler")
    21. End If

    guccini schrieb:

    es ist immer die erste Zeile
    Wovon die erste Zeile?

    RodFromGermany schrieb:

    Des Codes oder der Datei?

    VB.NET-Quellcode

    1. If Not Brücke.Exists Then
    2. Go Over The Brücke
    3. End If

    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!
    Die erste Zeile der Datei.
    wie gesagt es sind zwei unterschiedliche textdateien
    erste textdatei = text befindet sich erst nach 80 leerzeichen in der ersten zeile
    zweite textdatei = text befindet sich direkt am anfang in der ersten zeile

    kann aber nur eine von denen einlesen, möchte aber das beide eingelesen werden

    guccini schrieb:

    Die erste Zeile der Datei.
    OMG.
    Und in welcher Codezeile knallt es?
    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!
    Dann mach Dir mal folgendes Testprojekt (ein neues Projekt):

    VB.NET-Quellcode

    1. Dim Zeile1 = "12345"
    2. Dim Prog = Zeile1.Substring(80)
    und verstehe, was da passiert.
    Danach machst Du

    VB.NET-Quellcode

    1. Dim Zeile1 = "1234567890"
    2. Dim Prog = Zeile1.Substring(3)
    3. MessageBox.Show(Prog)

    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!
    Mir ist schon klar was da passiert, aber nicht wie ich das umgehn soll?
    wenn alle textdateine in der ersten zeile nach 80 leerzeichen dort ein text vorhanden ist , klappts....! aber was ist wenn eine textdatei wo ein text ganz am anfang ist was mache ich dann?

    es soll substring(80) und substring(0) gleichzeitig angezeigt werden

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

    @guccini Gugst Du Post #2:

    RodFromGermany schrieb:

    Überlege Dir, warum das knallt und bau eine entsprechende If-Anweisung ein.
    If Zeile1.Length >= 80 Then
    oder
    Zeile1.Trim()
    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!
    Danke und Frohes 2017...!!
    hat gekplappt....hab die if anweisung falsch interpretiert......length >= :thumbsup:

    wenn ich diesen dateien eine image zuweisen möchte, wie könnte man das machen, so funzt irgendwie nicht...:

    VB.NET-Quellcode

    1. Private Sub ListView1_DrawColumnHeader(sender As Object, e As DrawListViewColumnHeaderEventArgs) Handles ListView1.DrawColumnHeader
    2. e.DrawDefault = True
    3. End Sub
    4. Private Sub ListView1_DrawSubItem(sender As Object, e As DrawListViewSubItemEventArgs) Handles ListView1.DrawSubItem
    5. Using txtbrsh As New SolidBrush(e.SubItem.ForeColor)
    6. If ListView1.SelectedIndices.Contains(e.ItemIndex) And ListView1.Focused Then
    7. e.Graphics.FillRectangle(New SolidBrush(Color.FromKnownColor(KnownColor.Highlight)), e.Bounds)
    8. txtbrsh.Color = Color.White
    9. End If
    10. If e.Item.SubItems(1) Is e.SubItem Then
    11. e.DrawDefault = False
    12. Using sf As New StringFormat With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Center, .FormatFlags = StringFormatFlags.NoWrap, .Trimming = StringTrimming.EllipsisCharacter}
    13. If e.SubItem.Text = "TNr." Then
    14. e.Graphics.DrawImage(ImgList1.Images(0), e.Bounds.X, e.Bounds.Y, e.Bounds.Height, e.Bounds.Height)
    15. End If
    16. Dim rb As New Rectangle(e.Bounds.X + e.Bounds.Height, e.Bounds.Y, e.Bounds.Width - e.Bounds.Height, e.Bounds.Height)
    17. e.Graphics.DrawString(e.SubItem.Text, e.SubItem.Font, txtbrsh, rb, sf)
    18. End Using
    19. Else
    20. e.DrawDefault = True
    21. End If
    22. End Using
    23. If e.ColumnIndex = 1 Then
    24. If e.SubItem.Text = ".eia" Then
    25. Dim im As Image = My.Resources.index_1
    26. Dim location As Point = Me.ListView1.Items(e.ItemIndex).SubItems(e.ColumnIndex).Bounds.Location
    27. e.Graphics.DrawImage(im, location)
    28. e.DrawFocusRectangle(Me.ListView1.Items(e.ItemIndex).SubItems(e.ColumnIndex).Bounds)
    29. Elseif e.SubItem.Text = ".prg" Then
    30. Dim im As Image = My.Resources.index_2
    31. Dim location As Point = Me.ListView1.Items(e.ItemIndex).SubItems(e.ColumnIndex).Bounds.Location
    32. e.Graphics.DrawImage(im, location)
    33. e.DrawFocusRectangle(Me.ListView1.Items(e.ItemIndex).SubItems(e.ColumnIndex).Bounds)
    34. End If
    35. End If
    36. End Sub

    guccini schrieb:

    wenn ich diesen dateien eine image zuweisen möchte
    Was dürfen wir uns darunter vorstellen?
    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!
    AHa.
    2 Spalten, eine Spalte Image / Icon, eine Spalte Dateipfad / Name.
    ListView hat zwei Properties: LargeImageList und SmallImageList.
    Befrage dazu mal die MSDN oder StackOverflow.
    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!