FileStream->Close() Problem, Ressourcen nicht frei für Zugriff
-
Hallo Forum,
in meinem Programm habe ich eine Reihe von Schreib-/Lese-Zugriffen die ich jeweils mit einem FileStream initialisiere. Sobald die Operationen beendet sind, rufe ich den FileStream->Close() Befehl auf.
Ich dachte immer, dass dasreichen würde, um die Datei für den Zugriff wieder frei zu geben. Wenn ich allerdings im Programm-Ablauf wieder auf die Datei zugreife, kommt es manchmal vor, dass ich eine Meldung bekomme, dass ein anderer Prozess auf die Datei zugreift. Das kann aber eigentlich nicht sein. Manchmal läuft das Programm auch sauber durch, obwohl der Code absolut identisch ist.Folgenden Code benutze ich beispielsweise zum Schreiben:
FileStream^ myStream = gcnew FileStream(L"C:\\Temp\\einedatei.txt", FileMode::Open); StreamWriter^ myStreamWriter = gcnew StreamWriter(myStream); \\Schreipoperationen myStreamWriter->Close(); myStream->Close();
Mir scheint das der Aufruf der Close-Methode zwar das myStream-Objekt freigibt, aber die eigentliche Ressource - die Datei "einedatei.txt" - für eine gewisse Zeit noch gesperrt ist, da mein Programm diese noch nicht frei gegeben hat. Das tritt manchmal auf und manchmal eben nicht.
Kann ich die Freigabe irgendwie erzwingen? Funktioniert es durch das Aufrufen der Unlock-Methode aus der FileStream-Klasse?
So etwa:FileStream^ myStream = gcnew FileStream(L"C:\\Temp\\einedatei.txt", FileMode::Open); StreamWriter^ myStreamWriter = gcnew StreamWriter(myStream); \\Schreipoperationen myStreamWriter->Close(); myStream->Unlock(); //Datei-Ressource freigeben myStream->Close(); //myStream-Objekt freigeben
Vielen Dank für eure Hilfe,
physici
-
Rufe delete myStream; auf sobald Du den Stream nicht mehr benötigst.
Das führt dazu das Dispose() auf dem Stream aufgerufen wird.Simon