| |
VB.NET - FortgeschritteneSchreiben in Textdatei wird abgebrochen | | | Autor: kurol | Datum: 21.07.17 10:39 |
| Hallo zusammen,
ich bitte euch, mich bei folgendem Problem zu unterstützen:
Ich habe unter VB.NET 2012 ein Programm geschrieben, mit dem von auf einem embedded Rechner (ARM, Linux) Daten wie z. B. eine Log-Datei mit ca. 50 kB, reine Textdatei) über die serielle Schnittstelle abrufen und auf einem Bedienrechner (Windows 7 / 64Bit) darstellen kann.
Die abgerufene Log-Datei wird komplett in der Windows-PC geladen und in einer Richt-Text-Box auch einwandfrei dargestellt, wenn ich sie aber in eine Textdatei abspeichern will, bricht der Schreibvorgang nach einigen Hundert Bytes ab.
Hier ist es egal, ob ich den eingelesenen Text direkt oder den aus der Richt-text-Box ausgelesenen Text abspeicheren will. Der Schreibvorgang wird immer nach unterschiedlicher Länge abgebrochen.
Ich habe bereits sämtliche im Web gefundenen Code-Varianten (write, writeall, writealltext usw.) ausprobiert, alles erfolglos.
Es werden während des Schreibens auch keine anderen Befehle ausgeführt und die Datei ist komplett vom embedded-Rechner heruntergeladen.
Hier mal die Code-Variante, die ich zuletzt verwndet habe:
Dim docname As String = "d:\Log.txt"
Dim logWriter As New System.IO.StreamWriter(docname, True)
logWriter.Write(receivedtext) ' von UART oder
logWriter.Write(rtbreceived.text) ' aus Rich text box
logWriter.Flush()
logWriter.Close() Ich weiß nicht, was man hier noch falsch machen kann oder ob ich etwas nicht beachte (ich bin kein VB.NET - Spezialist).
Wenn also jemand das Problem kennt oder über eine Lösung verfügt, wäre ich ihm sehr dankbar.
Ich bedanke mich für eure Antworten schon mal im Voraus.
Roland | |
Re: Schreiben in Textdatei wird abgebrochen | | | Autor: Manfred X | Datum: 21.07.17 12:24 |
| Hallo!
Stehen eventuell Null-Bytes im empfangenen Bytestream?
Gibt es eine Ausnahme-Meldung?
Wird der Text vollständig in der RT-Box angezeigt?
Funktionieren Überladungen der "SaveFile"-Methode der Richtextbox? | |
Re: Schreiben in Textdatei wird abgebrochen | | | Autor: kurol | Datum: 21.07.17 14:09 |
| Hallo Manfred,
vielen Dank für die schnelle Antwort. Da ich, wie gesagt, kein VB.NET-Spezialist bin, habe ich mal nach diversen Änderungen die komplette Routine beigefügt.
Mittlerweile ist der Stand so:
in die RTB werden zur Laufzeit nur ein paar Bytes eingetragen, ebenfalls in die abgespeichete Datei.
Vor dem Öffnen des Savefile-Dialogs kommt die Meldung 'Kameratarget.exe [mein Programm] hat einen Haltepunkt ausgelöst'. Gemeint ist ein VB-interner Haltepunkt, keine Ahnung wie ich den abschalten kann...
Die Save-Dialog wird richtig aufgerufen, der Dateiname richtig eingetragen. Wenn ich dann auf 'Speichern' klicke, steht plötzlich der gesamte abgerufene Text fehlerlos in der RTB, allerdings nicht in der abgespeicherten Datei.
Wenn ich den Teil zum speichern (ab if text_sent = "SE" )auskommentiere, wird der gesamte abgerufene Text sofort in der RTB angezeigt.
..
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As _
System.IO.Ports.SerialDataReceivedEventArgs) Handles _
SerialPort1.DataReceived
ReceivedText(SerialPort1.ReadExisting())
End Sub
Private Sub ReceivedText(ByVal [text] As String)
Dim DateTime As String = Now.ToString("dd-MM-yyyy HH_mm_ss")
Dim docname As String = "Log.txt"
Dim dt = DateTime ' Datum und Zeit
' ermitteln
Dim answer As String
If rtbreceived.InvokeRequired Then
Dim x As New SetTextCallback(AddressOf ReceivedText)
Invoke(x, New Object() {(text)})
Else
answer = [text]
If text_sent <> "RST" Then _
' gesendete Abfrage war <> RST
Try
stopflag = True _
' weiteren Datenverkehr stoppen
rtbreceived.Text &= [text] _
' in Rich text box eintragen
rtbreceived.SelectionStart = rtbreceived.Text.Length _
' Autoscroll
rtbreceived.ScrollToCaret()
rtbreceived.Refresh()
If text_sent = "SE" Then _
' SE > Datei soll abgerufen und gespeichert werden
docname = docname & dt & ".txt"
SaveFileDialog1.FileName = docname
SaveFileDialog1.InitialDirectory = "d:\"
SaveFileDialog1.RestoreDirectory = True
SaveFileDialog1.Filter = "Text Files (*.txt*)|*.txt"
If SaveFileDialog1.ShowDialog = _
Windows.Forms.DialogResult.OK Then
My.Computer.FileSystem.WriteAllText( _
SaveFileDialog1.FileName, [text], True) 'oder
' My.Computer.FileSystem.WriteAllText(
' SaveFileDialog1.FileName, rtbreceived.Text, True)
End If
text_sent = ""
End If
Catch ex As Exception
' MsgBox("Error")
End Try
End If
text_sent = ""
stopflag = False 'Datenverkehr wieder
' zulassen
End If
' parse_answer(answer) 'Auswertung _
weiterer Befehle
End Sub Mir kommt es so vor, als wenn die Routine zum Speichern schon aufgerufen wird, bevor der gesamte Text übertragen wurde. Ich weiß aber nicht, wie ich das handeln muss. Vielleicht übersehe ich auch nur eine Kleinigkeit, ich programmiere halt zu 99,9% in C und nur selten in Visual Basic.
Falls Du einen Fehler oder eine Diskrepanz findest oder weitere Fragen hast, lasse es mich bitte wissen.
Freundlicher Gruß
Roland | |
Re: Schreiben in Textdatei wird abgebrochen | | | Autor: sv00010 | Datum: 21.07.17 18:49 |
| kurol schrieb:
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As _
System.IO.Ports.SerialDataReceivedEventArgs) Handles _
SerialPort1.DataReceived
ReceivedText(SerialPort1.ReadExisting())
End Sub Dieser Code liest die Daten vom SerialPort ein, welche bis jetzt verfügbar sind.
Das bedeutet nicht, dass bereits alles gesendet wurde.
Du solltest eine Möglichkeit einbauen, um herauszufinden ob noch weitere Daten gesendet werden oder ob dies alle Daten waren. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|