Ich habe viele Prozesse, die eine Datei lesen, die auf einer Netzwerkfreigabe gespeichert ist. Ursprünglich konnte ich nur einen Prozess die Datei lesen lassen, alle anderen würden Ausnahmen auslösen. Ich habe den folgenden Code implementiert, um das zu beheben:
using (StreamReader fileStreamReader = new StreamReader(File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)))
{
content = fileStreamReader.ReadToEnd();
}
Dadurch können mehrere Prozesse dieselbe Datei lesen, aber es scheint immer noch Probleme zu geben, denn manchmal können mehrere Prozesse immer noch nicht auf die Datei zugreifen. Dennoch kann ich später, wenn die Datei nicht in Gebrauch ist, zurückgehen und sie problemlos öffnen. Im Moment habe ich einige Wiederholungsversuche mit zufälligen Verzögerungen implementiert, die bisher zu helfen scheinen. Es scheint ein wenig skurril zu mir, um es auf diese Weise zu tun, so was wäre eine bessere Methode sein?
Dies ist der seltsame Teil, die Ausnahme, die ich bekomme, ist nicht von Datei IO überhaupt, es ist von einer Bibliothek namens CommStudio. Kurz gesagt, ich übertrage die Datei in eine Zeichenkette, ändere sie leicht, übertrage sie in einen Speicherstrom und schicke sie über ymodem auf rs232. Die Ausnahme sagt mir, dass das entfernte System abgebrochen hat. Das Gerät, das die Daten erhält, meldet, dass ein Übertragungsfehler aufgetreten ist, was normalerweise bedeutet, dass eine unvollständige/leere Datei empfangen wurde.
Normalerweise würde ich der Bibliothek die Schuld dafür geben, aber beim Testen am Schreibtisch und wenn nur ein Prozess auf die Datei zugreift, funktioniert es einwandfrei. Das einzige, was wirklich konsistent zu sein scheint, ist, dass es wahrscheinlich fehlschlägt, wenn mehrere Prozesse auf eine Datei zugreifen.