Entwickler-Ecke

IO, XML und Registry - Fehler bei Auslesen und späterem speichern einer Datei


DenniZ - So 11.03.07 21:10
Titel: Fehler bei Auslesen und späterem speichern einer Datei
Hi,

wen es interessiert, oder wenn ich etwas vergessen sollte, dann sollte das alles hier im alten Thread [http://www.c-sharp-forum.de/topic_Etwas+beim+Starten+der+Anwendung+ausfuehren_70849.html] stehen.

Ich kopiere das Problem von dort:
Also, wie ihr das beschrieben habt, klappt das einwandfrei! Er liest jetzt am Anfang die Datei, doch leider kommt doch ein Fehler:

"The process cannot access the file 'F:\ ... \bin\Debug\appPath1.txt' because it is being used by another process."

Das kommt dort, wo die Aufgabe des schreibens in die Datei steht, also bei mir bei richTextBox1_TextChanged!
Der Code dort lautet so:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {
            StreamWriter sw = new StreamWriter(Application.StartupPath + @"\appPath1.txt");
            {
                sw.Write(richTextBox1.Text);
                sw.Flush();
                sw.Close();
            }
        }

Ich habe nun versucht, meinen alten Code oben zu benutzen, beim Auslesen, dass er dort den StreamReader benutzt "und diesen auch wieder schließt!" so dachte ich mir, dass das wichtig ist.

Hat jemand eine Idee wie ich das umgehen kann? Evtl ein "wenn die Datei benutzt wird --> überspringen"? so eine art if und break?


Fehler, Datei sei benutzt weil vorher ausgelesen, wie kann das umgangen werden?


DenniZ - Mo 12.03.07 15:05

Hm, weis niemand eine Lösung?

:cry: Hatte in irgend einem anderen Thread was gelesen wie "Datei dat = new Datei" bla, also ihr wisst schon wie ich das meine, so aufgebaut wie "StreamWriter sw = new StreamWriter" aber eben mit der Datei, nur weis ich kein bisschen wie ich das dort anwenden soll :-/

Help plz :wink:

Achja, sry für Doppel-Post...


Christian S. - Mo 12.03.07 18:17

Die LoadFile-Methode der RichTextBox sollte die Datei eigentlich nicht blockieren. Hast Du sie sonstwie noch geöffnet?


DenniZ - Mo 12.03.07 18:25

Nein, rein gar nicht, das ist es ja was mcih verwirrt, er liest die Datei ja nur kurz aus und schließt sie ja "sozusagen" wieder.

Komme leider gar nicht mehr weiter, wenn mir keiner helfen kann, werde ich über 1 oder 2 "Save" Buttons nicht drumrum kommen, wäre wohl die einfachste Lösung.


Christian S. - Mo 12.03.07 18:30

Ah, jetzt sehe ich erst, dass Du das im OnChange-Event machst. Das ist IMHO eh nicht so toll, stell Dir mal vor, die Datei hat ein paar MB und die werden bei jedem Tastendruck neu geschrieben ;-) Außerdem finde ich es ganz angenehm, dass ich eine Datei nur nicht zu speichern brauche, damit Murks, den ich geschrieben habe, verschwindet ;-)

Was aber durchaus sein kann, ist, dass LoadFile das OnChange-Event auslöst und er direkt versucht, den Text in die Datei zu schreiben. Bin mir nicht ganz sicher, aber möglicherweise ist sie dann noch geöffnet.


DenniZ - Mo 12.03.07 20:00

Und damit schlägst du vor?

Das OnChange-Event weg machen und einfach das Speichern auf den Knopf "Run it!"(mit dem man dann die 2 Anwendungen öffnet) zu legen? Das wäre so meine Lösung! Wäre auch sinnvoller, so wirds nur gespeichert wenn man wirklich das benutzt und nicht z.B. jemandem das Programm zeigt!

Danke dir :) Werde das heute Abend oder morgen Mittag dann mal umsetzen versuchen!


DenniZ - Di 13.03.07 15:14

Dankeschön, hat super funktioniert, hab einfach auf den Run it! Button die Abspeicherungen gelegt :) ist sogar noch klüger ;)