none
ListView Datei Anzeigen RRS feed

  • Frage

  • 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 zeile ausgelesen werden aber erst nach 80 leerzeichen , klappt soweit .

    wenn aber eine text datei die schon bei Substring(0) was drin steht dann kommt es zu einer Fehlermeldung

    wie kann ich gleichzeitig substring(80) und substring (0) einsetzten

         ListView1.MultiSelect = False
            ListView1.View = View.Details
            ListView1.FullRowSelect = True
            ListView1.Items.Clear()
            ListView1.Columns.Clear()
            ListView1.Columns.Add("VollerDateiname", 0, HorizontalAlignment.Left) 
            ListView1.Columns.Add("TNr.", 120, HorizontalAlignment.Left)
            ListView1.Columns.Add("PROGRAMMNAME.", 450, HorizontalAlignment.Left)
            ListView1.Columns.Add("Grösse", 80, HorizontalAlignment.Center)
            ListView1.Columns.Add("GEAEND. AM", 170, HorizontalAlignment.Center)
            ListView1.Columns.Add("ERSTELL. AM", -2, HorizontalAlignment.Center)
            If Not IO.Directory.Exists("C:\Test\") Then
                Dim dFolder As DirectoryInfo = New DirectoryInfo("C:\Test\")
                Dim fFile As FileInfo
                Dim Zeile1 As String
                Dim Prog As String
                For Each fFile In dFolder.GetFiles("*.*")
                    With fFile
                        Using fileReader As StreamReader = My.Computer.FileSystem.OpenTextFileReader(.FullName, System.Text.Encoding.Default) 
                            Zeile1 = fileReader.ReadLine().TrimStart(" ")
                        End Using 
                        Prog = Zeile1.Substring(80)
                        ListView1.Items.Add(New ListViewItem(New String() {.Name, .Name, Prog, (.Length / 1000).ToString("#0 KB "), .CreationTime.ToString, .LastWriteTime.ToString}))
                    End With
                Next
                Return
            Else
                MsgBox("Daten nicht Vorhanden!", MsgBoxStyle.Critical, "Fehler")
            End If

    Samstag, 31. Dezember 2016 13:22

Antworten

  • Hallo,

    poste bitte immer die exakte Fehlermeldung mit, denn sonst können wir eigentlich auch nur raten oder es selbst ausprobieren.

    Wenn ich jetzt mal rate, würde ich sagen, dass es daran scheitert dass Substring den Start-Index innerhalb des Strings erwartet. Außerdem weißt du nicht mit Sicherheit wie viele Leerzeichen am Anfang der Datei stehen.

    An deiner Stelle würde ich die Leerzeichen am Anfang mittels TrimStart weg machen, denn dann sind die Leerzeichen alle weg. Allerdings rufst du das ja selbst schon auf, was so gesehen keinen Sinn macht.

    Ohne weitere Information würde ich sagen, dass du das suchst:

    With fFile
      Using fileReader As StreamReader = My.Computer.FileSystem.OpenTextFileReader(.FullName, System.Text.Encoding.Default) 
        Zeile1 = fileReader.ReadLine().TrimStart(" "c)
      End Using 
      Prog = Zeile1
      ListView1.Items.Add(New ListViewItem(New String() {.Name, .Name, Prog, (.Length / 1000).ToString("#0 KB "), .CreationTime.ToString, .LastWriteTime.ToString}))
    End With

    Also ohne einem Substring aufruf, da bereits ein TrimStart enthalten ist. 

    BTW, wenn du TrimStart nichts übergibst, dann wird jedes Zeichen entfernt, das bei Char.IsWhitespace true zurück gibt. Also ggf. auch Zeilenumbrüche usw., zusätzlich zum normalen Leerzeichen.

    PS: Du solltest Option Strict On schalten.


    Viele Grüße, Tom Lambert - MVP, MCC und MSP
    Wozu Antworten markieren und Posts bewerten? Klicke hier
    Nützliche Links: .NET Quellcode | C#/VB.NET Konverter | GitHub Forum Samples | Account bestätigen (Verify Your Account)
    Ich: Webseite | Facebook | Twitter | Code Snippets | GitHub


    Sonntag, 1. Januar 2017 10:55
    Moderator

Alle Antworten

  • Hallo,

    poste bitte immer die exakte Fehlermeldung mit, denn sonst können wir eigentlich auch nur raten oder es selbst ausprobieren.

    Wenn ich jetzt mal rate, würde ich sagen, dass es daran scheitert dass Substring den Start-Index innerhalb des Strings erwartet. Außerdem weißt du nicht mit Sicherheit wie viele Leerzeichen am Anfang der Datei stehen.

    An deiner Stelle würde ich die Leerzeichen am Anfang mittels TrimStart weg machen, denn dann sind die Leerzeichen alle weg. Allerdings rufst du das ja selbst schon auf, was so gesehen keinen Sinn macht.

    Ohne weitere Information würde ich sagen, dass du das suchst:

    With fFile
      Using fileReader As StreamReader = My.Computer.FileSystem.OpenTextFileReader(.FullName, System.Text.Encoding.Default) 
        Zeile1 = fileReader.ReadLine().TrimStart(" "c)
      End Using 
      Prog = Zeile1
      ListView1.Items.Add(New ListViewItem(New String() {.Name, .Name, Prog, (.Length / 1000).ToString("#0 KB "), .CreationTime.ToString, .LastWriteTime.ToString}))
    End With

    Also ohne einem Substring aufruf, da bereits ein TrimStart enthalten ist. 

    BTW, wenn du TrimStart nichts übergibst, dann wird jedes Zeichen entfernt, das bei Char.IsWhitespace true zurück gibt. Also ggf. auch Zeilenumbrüche usw., zusätzlich zum normalen Leerzeichen.

    PS: Du solltest Option Strict On schalten.


    Viele Grüße, Tom Lambert - MVP, MCC und MSP
    Wozu Antworten markieren und Posts bewerten? Klicke hier
    Nützliche Links: .NET Quellcode | C#/VB.NET Konverter | GitHub Forum Samples | Account bestätigen (Verify Your Account)
    Ich: Webseite | Facebook | Twitter | Code Snippets | GitHub


    Sonntag, 1. Januar 2017 10:55
    Moderator
  • Erstmal Frohes Neus 2017.....!!

    Vielen Dank für die Antwort....hat gekplappt....!

    jetzt würde ich gerne für diese zwei unterschiedliche dateien ein image zuweisen.

    die dateien haben eine endung mit "test.eia" und  "test.prg", diese sollen in eine listview zugewiesn werden.

    für .eia ein image und für .prg auch sein eigenen image, habe das so gemacht, leider ohne erfolg

      Private Sub ListView1_DrawColumnHeader(sender As Object, e As DrawListViewColumnHeaderEventArgs) Handles ListView1.DrawColumnHeader
            e.DrawDefault = True
        End Sub
    
        Private Sub ListView1_DrawSubItem(sender As Object, e As DrawListViewSubItemEventArgs) Handles ListView1.DrawSubItem
    
            Using txtbrsh As New SolidBrush(e.SubItem.ForeColor)
                If ListView1.SelectedIndices.Contains(e.ItemIndex) And ListView1.Focused Then
                    e.Graphics.FillRectangle(New SolidBrush(Color.FromKnownColor(KnownColor.Highlight)), e.Bounds)
                    txtbrsh.Color = Color.White
                End If
                If e.Item.SubItems(1) Is e.SubItem Then
                    e.DrawDefault = False
                    Using sf As New StringFormat With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Center, .FormatFlags = StringFormatFlags.NoWrap, .Trimming = StringTrimming.EllipsisCharacter}
                        If e.SubItem.Text = "TNr." Then
                            e.Graphics.DrawImage(ImgList1.Images(0), e.Bounds.X, e.Bounds.Y, e.Bounds.Height, e.Bounds.Height)
                        End If
                        Dim rb As New Rectangle(e.Bounds.X + e.Bounds.Height, e.Bounds.Y, e.Bounds.Width - e.Bounds.Height, e.Bounds.Height)
                        e.Graphics.DrawString(e.SubItem.Text, e.SubItem.Font, txtbrsh, rb, sf)
                    End Using
                Else
                    e.DrawDefault = True
                End If
            End Using
    
         
                If e.ColumnIndex = 1 Then
    
                If e.SubItem.Text = ".eia" Then
                    Dim im As Image = My.Resources.index_1
                    Dim location As Point = Me.ListView1.Items(e.ItemIndex).SubItems(e.ColumnIndex).Bounds.Location
                    e.Graphics.DrawImage(im, location)
                   
                    e.DrawFocusRectangle(Me.ListView1.Items(e.ItemIndex).SubItems(e.ColumnIndex).Bounds)
                Elseif e.SubItem.Text = ".prg" Then
                    Dim im As Image = My.Resources.index_2
                    Dim location As Point = Me.ListView1.Items(e.ItemIndex).SubItems(e.ColumnIndex).Bounds.Location
                    e.Graphics.DrawImage(im, location)                
                    e.DrawFocusRectangle(Me.ListView1.Items(e.ItemIndex).SubItems(e.ColumnIndex).Bounds)
                  
                End If
                End If
    End Sub

    Sonntag, 1. Januar 2017 21:47
  • Hallo,

    stelle dafür am besten eine neue Frage, da sie relativ wenig mit der alten zu tun hat und Threads vergleichsweise schnell sehr lang und unübersichtlich werden können.

    Auch noch erklären solltest du, was eia und prg für Dateitypen sind. Zumindest mir sagen sie nichts und .NET wird damit vielleicht nichts anfangen können.


    Viele Grüße, Tom Lambert - MVP, MCC und MSP
    Wozu Antworten markieren und Posts bewerten? Klicke hier
    Nützliche Links: .NET Quellcode | C#/VB.NET Konverter | GitHub Forum Samples | Account bestätigen (Verify Your Account)
    Ich: Webseite | Facebook | Twitter | Code Snippets | GitHub

    Montag, 2. Januar 2017 23:48
    Moderator
  • OK...!!
    Dienstag, 3. Januar 2017 04:26