Laden...

IOException beim gleichzeitigen File Zugriff...

Erstellt von ltrader vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.034 Views
L
ltrader Themenstarter:in
60 Beiträge seit 2008
vor 15 Jahren
IOException beim gleichzeitigen File Zugriff...

Hallo,

folgendes Szenario:
In einer Consolen Anwendung die durch einen Scheduled Task getriggert wird,
schreibe ich in regelmässigen Abständen ein XML file auf Platte.

Parallel dazu greift eine ASP.NET Anwendung gelegentlich auf dieses File zu.

Das Problem ist nun - scheint mir auch irgendwo plausibel - dass durch den Lesezugriff der ASP.NET Anwendung das File wohl blockiert ist; d.h. ich kann im nächsten Zyklus des Scheduled Task das File nicht überschreiben.

Welche Möglichkeiten seht ihr hier, dieses Problem zu umschiffen?
Gibt es eine sinnvolle Möglichkeit das File explizit freizugeben? Die Zugriffe sind alle unter Verwendung eines using(...) gewrappt.

Grüße, ltrader

Real programers do not comment their code.
It is hard to write and it should be hard to understand!

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo ltrader,

erster Ansatz: Richtigen FileShare-Modus wählen.
zweiter Ansatz: Zugriffe synchronisieren.

herbivore

L
ltrader Themenstarter:in
60 Beiträge seit 2008
vor 15 Jahren

Hallo herbivore,

folgendermassen greife ich beim Lesen auf das File zu:


 using (FileStream lStream = new FileStream(iConfigPath,FileMode.Open,FileAccess.Read))
{


}

Ich ging davon aus, dass das mit Hilfe von using aufgerufenen Dispose()
Die Ressource wieder freigibt.

Das Schreiben mache ich über einen StreamWriter



 using (StreamWriter lStreamWriter = new StreamWriter(lTempPath))


wobei ich ein Stück weiter unten as File folgendermassen kopiere:


 File.Move(lTempPath, lCurrencPath);

Ich wüsste nicht, was hier augenscheinlich verkehrt sein könnte..

Gruß, ltrader

Real programers do not comment their code.
It is hard to write and it should be hard to understand!

946 Beiträge seit 2008
vor 15 Jahren

Es geht hier nicht um die Ressourcen, sondern darum, das das File normalerweise nur von einem Process gleichzeitig geöffnet werden kann.

Falls du im langen Post von herbivore etwas übersehen hast 😉:

Richtigen FileShare-Modus wählen.

Also

FileStream lStream = new FileStream(iConfigPath, FileMode.Open, FileAccess.Read, FileShare.Read);

Wichtig ist die letzte Zeile.

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo ltrader,

so wie ich es verstanden habe, liegt das Problem in dem parallelen Zugriff durch die ASP.NET Anwendung.

herbivore

L
ltrader Themenstarter:in
60 Beiträge seit 2008
vor 15 Jahren

Hallo ihr zwei,

genau der parallele Zugriff sollte das Problem sein..
Sicher. Die Lösung die ihr aufzeigt liegt mir jetzt auf der Hand. Manchmal sieht man den Wald vor lauter Bäumen nicht 😉

Ich probiere das mal. Sollte ja hinhauen..

Grüße und danke , ltrader

Real programers do not comment their code.
It is hard to write and it should be hard to understand!