Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[vb.net] Bestand word niet helemaal ingelezen

Pagina: 1
Acties:

  • Damic
  • Registratie: September 2003
  • Laatst online: 00:41

Damic

Tijd voor Jasmijn thee

Topicstarter
Ik lees een volledig bestand (in dit geval het log bestand van de Distributted client in in een listbox, dit gaat goed in de main code maar in een aparte form gaat het mis. In de plaats van de +1000 lijnen geraakt ie niet verder dan 33. Hier onder de code
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
            On Error GoTo sErr
            Dim objReader As New System.IO.StreamReader(dNet_Path & "\" & sLog)
            pbLoad.Maximum = objReader.Peek() 
            pbLoad.Value = 0
            pbLoad.Visible = True
            While (objReader.Peek() <> -1)
                lstLog.Items.Add(objReader.ReadLine)
                Application.DoEvents()
                pbLoad.Value = pbLoad.Value + 1
            End While
sErr:
            objReader.Close()
            pbLoad.Visible = False
Iemand een idee wat er fout gaat?

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Waarschijnlijk treedt er een fout op. Gebruik try..catch of lees Err uit in je error-handler, die nu enkel de laadbalk doet verdwijnen. Zie ook Error Handling in Visual Basic .NET.

[ Voor 25% gewijzigd door CodeCaster op 27-10-2014 21:02 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • Damic
  • Registratie: September 2003
  • Laatst online: 00:41

Damic

Tijd voor Jasmijn thee

Topicstarter
Ja ok doh eventjes wat aangepast want err is een class :(

Edit: die hoofdpijn is toch niet zo goed voor mijn denken. Na wat nadenken werkt het terug, iets mis met die .peek() want die geeft in het begin geen max waarde af en daar ging ik vanuit.
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
      btnRefresh.Enabled = False
        With lstLog
            .Enabled = False
            .Items.Clear()

            If Not FileReal(dNet_Path & "\" & sLog) Then
                MsgBox("No log-file found" & vbCrLf & "File: " & dNet_Path & "\" & sLog, vbCritical)
                Me.Close()
            End If

            '-load history file
            On Error GoTo sErr
            Dim objReader As New System.IO.StreamReader(dNet_Path & "\" & sLog)
            Application.DoEvents()
            '  pbLoad.Maximum = objReader.Peek()
            ' pbLoad.Value = 0
            ' pbLoad.Visible = True
            'ToolStripStatusLabel2.Text = pbLoad.Maximum
            While (objReader.Peek() <> -1)
                .Items.Add(objReader.ReadLine)
                ' pbLoad.Value = pbLoad.Value + 1
            End While
sErr:
            objReader.Close()
            If Err.Number <> 0 Then MsgBox("#" & Err.Number & "::" & Err.Description)
            'pbLoad.Visible = False
            If .Items.Count = 0 Then
                MsgBox("Log File empty", vbCritical)
                Me.Close()
            End If
            .SelectedIndex = .Items.Count - 1
            .Enabled = True
        End With
        btnRefresh.Enabled = True

[ Voor 92% gewijzigd door Damic op 27-10-2014 21:12 ]

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
hey Damic,

Waarom ben je het wiel opnieuw aan't uitvinden?

dingen als System.IO.File.ReadAllLines() enzo helpen je hier enorm bij.

Als je persee streams wilt gebruiken. Gebruik dan ook using blocks met daarin je IDisposable objects. Zodat als er een error is, je ook gewoon je .Dispose() aanroept en daarmee het object disposed.

dan heb je ook geen verkapt goto statement nodig

dus zoiets:
Visual Basic .NET:
1
2
3
4
5
Dim array As String() = File.ReadAllLines(Path.Combine(dNet_Path, sLog)) 
Dim line As String 
For Each line In array 
    //doe je ding
Next 


ow en lees svp de link van CodeCaster...
Je doet .NET geen VB6

[ Voor 30% gewijzigd door BasieP op 27-10-2014 21:47 ]

This message was sent on 100% recyclable electrons.


  • Acid_Burn
  • Registratie: Augustus 2001
  • Laatst online: 02:58

Acid_Burn

uhuh

Je hoeft niet eens te 'for each'-en om die items toe te voegen. Als het een winforms listbox is kan je ook de array direct als datasource setten
Visual Basic:
1
2
Dim arrLog As String() = File.ReadAllLines(Path.Combine(dNet_Path, sLog)) 
lstLog.DataSource = arrLog


is het een WPF listbox dan gebruik je .itemssource
Visual Basic:
1
2
Dim arrLog As String() = File.ReadAllLines(Path.Combine(dNet_Path, sLog)) 
lstLog.ItemsSource = arrLog


En 'on error goto' moet je inderdaad vergeten.

Glass Eye Photography | Zelfbouw wireless fightstick | Mijn puzzel site


  • Damic
  • Registratie: September 2003
  • Laatst online: 00:41

Damic

Tijd voor Jasmijn thee

Topicstarter
Programma is orgineel in vb6 geschreven en on error goto werkt :p moest dat nu niet werken zou ik try catch gebruiken, eerst zien dat alles werkt en dan optimaliseren.

Ha das handig die datasource.

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Gebruik een StreamReader in een using statement zou ik zeggen:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Sub DoSomething()

    ' (..)

    Using reader As StreamReader = New StreamReader(Path.Combine(dNet_Path, sLog))

        While Not reader.EndOfStream

            Dim line As String = reader.ReadLine()
            ' Do you trick

        End While
    End Using
End Sub

while (me.Alive) {
me.KickAss();
}

Pagina: 1