Announcement

Collapse
No announcement yet.

C# gibt Datei nicht frei

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • C# gibt Datei nicht frei

    Ich habe angefangen, mein erstes Projekt in C# zu erstellen. Das Zusammenklicken der GUI hat auch recht schnell geklappt. Jetzt soll mein Programm beim Start Benutzereinstellungen laden. Im Microsoft Buch von
    J.Sharp u. J. Jagger (empfehlenswert) wird angeraten, XML Dateien zu benutzen, da das der aktuelle Standard ist. Eine txt-Datei hätte auch ausgereicht.
    Als Anfänger richte ich mich da nach den Profis.
    Also im net-Framework xml-Datei als neues Element dem Projekt hinzugefügt.
    Mein Programm liest auch aus der Datei die Daten, nur, wenn eine andere Klasse in die Datei schreiben möchte, erfolgt ein Fehler, da ein anderes Programm die Datei verwendet.
    Also die Kapitel mit dem Garbage Collector nachgelesen.
    Mit try {... } finally { reader.Close(); } experimentiert - hat nicht geholfen.

    Mit IDisposable gearbeitet - Fehlanzeige.

    Die Using Anweisung als das non plus Ultra eingesetzt - klappt nicht.

    Da habe ich mal die xml-Datei mit dem Editor geladen, um festzustellen, wann der Schreibschutz erfolgt. (ausprobiert ob Änderungen speicherbar sind).

    Bereits nachdem das net-Framework geladen wird, war keine Speicherung in die xml-Datei mehr möglich. Ich mußte das Projekt gar nicht starten.

    Als erstes habe ich die xml-datei wieder aus dem Projekt entfernt. Der Lesezugriff war trotzdem möglich. Aber schreibgeschütz wurde sie vom net-Framework nach wie vor.
    Dann habe ich eine neue Datei mit neuen Namen erstellt und den Inhalt aus der alten Datei hineinkopiert. Die Dateiverweise habe ich im Quellcode entsprechend korrigiert.
    Jetzt läuft die Applikation wunschgemäß.
    Ich vermute, daß das net-Framework eine Liste aller benötigten Dateien verwaltet, und darauf alleinige Zugriffsrechte setzt.
    Als Anfänger habe ich keine andere Erklärung parat.

  • #2
    Hallo,

    ich vermute einmal, dass Visual Studio 2005 als Entwicklungsumgebung genutzt wird.

    Beim Betriebssystem Windows ist das Erzeugen eines neuen Prozesses eine ressourcenintensive Angelegenheit. Da es bei .NET keinen prinzipiellen Unterschied zwischen einer EXE- und DLL-Assembly gibt, nutzt Visual Studio 2005 in der Voreinstellung den ständig laufenden Prozess Anwendungsname.vshost.exe. Die EXE-Assembly wird zum Debuggen dort hineingeladen und in einer eigenen AppDomain ausgeführt. Allerdings hat dieser ständig laufende Proxy-Prozess einige Nebenwirkungen, darunter auch den Effekt, dass die Dateien geöffnet bleiben können.

    In den Projekteigenschaften kann VSHOST auf der Debug-Seite über die Checkbox Enable the Visual Studio hosting process abgeschaltet werden. Wenn VSHOST deaktiviert ist, wird der Prozess der Anwendung zum Programmende auch beim Start aus dem Debugger heraus zerstört, so dass alle Win32-Handles ebenfalls freigegeben werden.

    Die Auswirkung dieser Checkbox kann durch den folgenden Test visualisiert werden:

    <div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"><p style="margin: 0px;">label1.Text = <span style="color: #2b91af;">AppDomain</span>.CurrentDomain.FriendlyName;</p></div>
    Zuletzt editiert von Andreas Kosch; 18.01.2007, 09:04.

    Comment

    Working...
    X