Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
IOException beim gleichzeitigen File Zugriff...
ltrader
myCSharp.de - Member



Dabei seit:
Beiträge: 60
Herkunft: Mannheim

Themenstarter:

IOException beim gleichzeitigen File Zugriff...

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo ltrader,

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

herbivore
private Nachricht | Beiträge des Benutzers
ltrader
myCSharp.de - Member



Dabei seit:
Beiträge: 60
Herkunft: Mannheim

Themenstarter:

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
SeeQuark
myCSharp.de - Member

Avatar #avatar-2825.jpg


Dabei seit:
Beiträge: 959

beantworten | zitieren | melden

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 :
Zitat von herbivore
Richtigen FileShare-Modus wählen.
Also

FileStream lStream = new FileStream(iConfigPath, FileMode.Open, FileAccess.Read, FileShare.Read);
Wichtig ist die letzte Zeile.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo ltrader,

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

herbivore
private Nachricht | Beiträge des Benutzers
ltrader
myCSharp.de - Member



Dabei seit:
Beiträge: 60
Herkunft: Mannheim

Themenstarter:

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers