Hallo,
ich möchte eine Textdatei / CSV-Datei, die von einem externen Programm generiert wird, auslesen und anschließend löschen. Dazu wird von einem Backgroundworker ein Verzeichnis überwacht. Beim ersten Mal Lesen funktioniert auch alles problemlos. Beim zweiten Mal Lesen bekomme ich eine Fehlermeldung:
the process cannot access the file because it is being used by another process
Ich habe schon versucht, die Datei nach dem Lesen zu Schließen aber ich weiß nicht genau wo mein Fehler sein könnte.
Wäre für jeden Hinweis sehr dankbar.
Hier der relevante Sourcecode:
ich möchte eine Textdatei / CSV-Datei, die von einem externen Programm generiert wird, auslesen und anschließend löschen. Dazu wird von einem Backgroundworker ein Verzeichnis überwacht. Beim ersten Mal Lesen funktioniert auch alles problemlos. Beim zweiten Mal Lesen bekomme ich eine Fehlermeldung:
the process cannot access the file because it is being used by another process
Ich habe schon versucht, die Datei nach dem Lesen zu Schließen aber ich weiß nicht genau wo mein Fehler sein könnte.
Wäre für jeden Hinweis sehr dankbar.
Hier der relevante Sourcecode:
VB.NET-Quellcode
- Public Class Patientfile
- Dim PatNummer As String
- Dim PatName As String
- Dim PatGeburtstag As String
- Private Sub ErsetzeUmlaute(ByRef reader As String)
- reader = Replace(reader, "{", "ä")
- reader = Replace(reader, "}", "ü")
- reader = Replace(reader, "|", "ö")
- reader = Replace(reader, "~", "ß")
- reader = Replace(reader, "]", "Ü")
- reader = Replace(reader, "\", "Ö")
- reader = Replace(reader, "[", "Ä")
- End Sub
- Sub LoadtextFromFile(ByVal fileName As String)
- Try
- Using csvParser As New TextFieldParser(fileName)
- With csvParser
- ' Feld-Trennzeichen
- .SetDelimiters(",")
- ' Festlegen, ob die Datenfelder in Anführungszeichen stehen
- .HasFieldsEnclosedInQuotes = False ' bzw. True
- ' Falls die 1. Zeile die Spaltennamen enthält
- 'Dim Header As String = .ReadLine()
- ' Datei zeilenweise durchlaufen
- Dim FieldData() As String
- Do While Not .EndOfData
- ' alle Datenfelder der aktuellen Datenzeile lesen
- FieldData = .ReadFields()
- PatNummer = FieldData(0)
- PatName = FieldData(1)
- PatGeburtstag = FieldData(2)
- Debug.Print(FieldData(0)) ' 1. Feld
- Debug.Print(FieldData(1)) ' 2. Feld
- Debug.Print(FieldData(2)) ' 3. Feld
- Loop
- End With
- End Using
- Catch ex As Exception
- MsgBox(ex.Message)
- End Try
- End Sub
- Sub DeletetextFile(fileName As String)
- My.Computer.FileSystem.DeleteFile(fileName)
- End Sub
- Function GetPatName() As String
- Return PatName
- End Function
- Function GetPatNummer() As String
- Return PatNummer
- End Function
- Function GetPatGeburtstag() As String
- Return PatGeburtstag
- End Function
- End Class
- Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
- While boolProgrammEnde = False
- If File.Exists(tbWatchThisFolder.Text & tbWatchThisFile.Text) Then
- Dim Patient As New Patientfile
- 'Code, der ausgeführt wird wenn eine Datei gefunden wird:
- With Patient
- .LoadtextFromFile(tbWatchThisFolder.Text & tbWatchThisFile.Text)
- .DeletetextFile(tbWatchThisFolder.Text & tbWatchThisFile.Text) 'Lösche die Datei nach dem Lesen wieder
- tbLog.AppendText(.GetPatNummer & vbCrLf)
- tbLog.AppendText(.GetPatName & vbCrLf)
- tbLog.AppendText(.GetPatGeburtstag & vbCrLf)
- End With
- End If
- End While
- End Sub
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „tunixx“ ()