2016-11-02 4 views
0

Ich möchte die gleiche Datei mit StreamReader und StreamWriter lesen und schreiben. Ich weiß, dass ich in meinem Code versuche, die Datei zweimal zu öffnen, und das ist das Problem. Könnte mir jemand einen anderen Weg geben, dies zu tun? Ich war ein bisschen verwirrt.Textdatei für einen Entfernungswert suchen

Wie für das Programm wollte ich ein Programm erstellen, wo ich einen Text erstellen, wenn es nicht existiert. Wenn es existiert, vergleicht es jede Zeile mit einer Listbox und sieht, ob der Wert aus der Listbox dort erscheint. Wenn dies nicht der Fall ist, wird es dem Text hinzugefügt.

Dim SR As System.IO.StreamReader 
    Dim SW As System.IO.StreamWriter 


    SR = New System.IO.StreamReader("D:\temp\" & Cerberus.TextBox1.Text & "_deleted.txt", True) 
    SW = New System.IO.StreamWriter("D:\temp\" & Cerberus.TextBox1.Text & "_deleted.txt", True) 

    Dim strLine As String 


    Do While SR.Peek <> -1 
     strLine = SR.ReadLine() 
     For i = 0 To Cerberus.ListBox2.Items.Count - 1 
      If Cerberus.ListBox2.Items.Item(i).Contains(strLine) = False Then 
       SW.WriteLine(Cerberus.ListBox2.Items.Item(i)) 
      End If 
     Next 
    Loop 

    SR.Close() 
    SW.Close() 
    SR.Dispose() 
    SW.Dispose() 
    MsgBox("Duplicates Removed!") 
+0

Mögliches Duplikat von [So lesen und schreiben Sie eine Datei in C#] (http://stackoverflow.com/questions/605685/how-to-both-read-and-write-a-file-in-c -sharp) –

+1

Wenn Ihre Dateien nicht so groß sind, sollten Sie ['File.ReadAllLines'] (https://msdn.microsoft.com/en-us/library/system.io.file.readalllines (v = vs. 110) .aspx) und ['File.WriteAllLines'] (https://msdn.microsoft.com/en-us/library/system.io.file.writeallines (v = vs.110) .aspx). –

+0

Ich untersuche den FileStream-Befehl. Irgendwie finde ich heraus, wie es funktioniert. Auch für andere Möglichkeiten geöffnet. –

Antwort

0

Wenn die Datei nicht so groß ist, sollten Sie File.ReadAllLines und File.WriteAllLines verwenden.

Dim path = "D:\temp\" & Cerberus.TextBox1.Text & "_deleted.txt" 

Dim lines = File.ReadAllLines(path) 'String() -- holds all the lines in memory 
Dim linesToWrite = Cerberus.ListBox2.Items.Cast(Of String).Except(lines) 
File.AppendAllLines(path, linesToWrite) 

Wenn die Datei groß ist, aber Sie haben nur ein paar Zeilen schreiben, dann können Sie File.ReadLines verwenden:

Dim lines = File.ReadLines(path) 'IEnumerable(Of String)\ 
    'holds only a single line in memory at a time 
    'but the file remains open until the iteration is finished 

Dim linesToWrite = Cerberus.ListBox2.Items.Cast(Of String).Except(lines).ToList 
File.AppendAllLines(path, linesToWrite) 

Wenn es eine große Anzahl von Linien zu schreiben, dann verwenden Sie die Antworten von this question.

+0

Danke Sir! Mein Problem wurde gelöst. –

Verwandte Themen