System.IO.IOException: The process cannot access the file'...' because it is being used by another process?


04.11.2021, 16:22

Der Code bewirkt dass in einem TXT-File die Vorhandenen Daten auf die in textxBox2 hinzugefügten Daten überprüft, also wenn die Daten schon vorhanden sind, wird der if-Block ausgeführt

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Es fällt auf, dass du deine Datei doppelt einliest.

var there = File.ReadAllText(path);
// ...
foreach (var line in File.ReadAllLines(path)) //Fehler

Führe doch stattdessen diese Aktion nur einmal durch, bevor du den Writer öffnest (dann kommen sich die verschiedenen Prozesse, die auf die Datei zugreifen, auch nicht mehr ins Gehege).

var lines = File.ReadAllLines(path);

// use writer ...

Wieso du im Fall, dass die Textboxeingabe nicht in einer Zeile steht, nochmal den kompletten Inhalt der Datei einfügen möchtest, kann ich nicht nachvollziehen. Aber dafür kannst du dir, direkt nach dem Einlesen auch alle Zeilen leicht wieder zusammentackern lassen:

var fullText = string.Join(Environment.NewLine, lines);
1TheCrazy 
Fragesteller
 04.11.2021, 17:37

Erstmal danke, danke, danke für die Lösung. Das hat mich zum verzweifeln gebracht.

Bei der Textdatei handelt es sich um eine Art Datenspeicher von Usernamen + Passwort und damit die Daten nicht einfach gelöscht werden, schreibe ich die Daten die schon vorhanden sind + die neuen, wenn diese nicht schon vorhanden sind.

0
regex9  04.11.2021, 18:41
@1TheCrazy

Du könntest dir den Ablauf mit dem Writer auch sparen.

Erst liest du wie gehabt alle Zeilen ein und schaust, ob die Eingabe schon existiert. Wenn ja, springst du entweder direkt aus der Methode heraus oder merkst es dir zumindest.

Am Ende der Schleife setzt du (wenn die Eingabe nicht gefunden werden konnte) die AppendAllLines-Methode der File-Klasse ein.

File.AppendAllLines(path, new [] { textBox2.Text });
0