Entwickler-Ecke

IO, XML und Registry - Datei öffen und wieder schliessen.


tomycat - Di 18.04.17 20:37
Titel: Datei öffen und wieder schliessen.
hallo,
ein Button öffnet die Datei


C#-Quelltext
1:
System.IO.StreamReader filel = new System.IO.StreamReader(@"c:\meinprojekt\update.txt", System.Text.Encoding.Default);                    


2ter Button:

C#-Quelltext
1:
2:
WebClient Clientq = new WebClient();
Clientq.DownloadFile("http://feledi.de/update.txt"@"C:\meinprojekt\update.txt");


Ich klicke den 2ten Button an und es kommt zum Crash. Was muss ich noch hinzufügen, dass ich Button 2 ausühren kann?


Moderiert von user profile iconTh69: Topic aus Basistechnologien verschoben am Mi 19.04.2017 um 09:46


lapadula - Di 18.04.17 20:58

Was kommt denn da für eine Fehlermeldung?

Der 2. Button funktioniert doch komplett unabhängig vom 1. oder was hast du vor?

Habe das eben schnell ausprobiert, es funktioniert. Habe deinen Quellcode 1:1 kopiert, nur mit meinem Pfad. Vielleicht liegt es an dem, Tipfehler?


Ralf Jansen - Di 18.04.17 21:25

Du öffnest zuerst eine File per StreamReader. Dann versuchst du per Webclient.DownloadFile auch mit dem File zu arbeiten (da rein zu schreiben) vermutlich während der StreamReader das Fiel noch offen hat. In erster Näherung kann immer nur einer ein File sinnvoll nutzen. Also entweder WebClient.DownloadFile oder ein StreamReader auf ein File öffnen.


tomycat - Di 18.04.17 21:57

fehler123 (jpg, 341.84 KB)

Moderiert von user profile iconChristian S.: Bild als Anhang eingefügt


Christian S. - Di 18.04.17 22:00

Beschreibung (jpg, 345.37 KB)


tomycat - Mi 19.04.17 19:37

thx, ich bin der Sache von euch nachgegangen, leider habe ich den überblick verloren.
Dann habe ich probiert den Fehler einzugrenzen:

Das ist der Inhalt von meinem Button A.
Einmal klick Button A alles Super, noch mal klick auf Button A, dann bekommen ich die gleiche Fehlermeldung wie oben beschrieben.WebException wurde nicht behandelt Zeile 2


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
 WebClient Client = new WebClient();     
            Client.DownloadFile("http://xxxxxxx.de/update.txt"@"C:\Felkass\update_web.txt");
           
            string[] update_web = new string[1];
            string[] update_local = new string[1];

            int counter = 0;
            string line;

            /////////// WEB 
            System.IO.StreamReader file = new System.IO.StreamReader(@"c:\Felkass\update_web.txt", System.Text.Encoding.Default);
            while ((line = file.ReadLine()) != null)
            {
                update_web[counter] = line;
                counter++;
            }
            //  MessageBox.Show(update_web[0]);
            textBox1.Text += update_web[0];
            textBox1.Text += "...ist die Aktuelle Version";
            textBox1.Text += "\r\n";


Christian S. - Mi 19.04.17 20:08

Eine WebException ohne ihre Details ist zu wenig Information. Klicke mal unten im Exception-Dialog auf "Details anzeigen" und schreibe mal, was als Status und was als Response zurückgekommen ist.


tomycat - Mi 19.04.17 20:18

bitte sehr
mehr.jpg (jpg, 86.33 KB)

Moderiert von user profile iconChristian S.: Bild als Anhang eingefügt


Christian S. - Mi 19.04.17 20:27

Und wenn Du jetzt diese Informationen ansiehst, welche Ideen kommen Dir?

P.S.: Bitte lade Bilder hier im Forum als Anhang hoch, damit sichergestellt ist, dass sie langfristig verfügbar sind.


tomycat - Do 20.04.17 11:39

Idee A
das ganze als thrad / Prozess laufen zu lassen.

Idee B
ich füge einen Befehl ein, der das Öffnen der Text Datei schließt.


Christian S. - Do 20.04.17 13:04

Idee A dürfte Dir nichts bringen, denn die Meldung besagt ja, dass die Textdatei durch einen anderen Prozess blockiert wird.

Idee B, wenn ich sie richtig verstanden habe, dürfte in die richtige Richtung gehen: Du musst identifizieren, durch was die Datei gelockt wird und das abstellen. An welchen Stellen in Deinem eigenen Programm greifst Du zum Beispiel auf die Datei zu und schließt sie danach nicht sauber?


tomycat - Do 20.04.17 19:09

Danke fürs hinleiten. Hab die Lösung. In Microsoft Beispiele ist das nicht standartmäsig dabei, deswegen war ich verwirrt. :-)

C#-Quelltext
1:
file.Close();                    


Th69 - Do 20.04.17 19:26

Benutze am besten generell die using-Anweisung dafür, also

C#-Quelltext
1:
2:
3:
4:
using (StreamReader file = new StreamReader(...))
{

}

So mußt du nicht explizit dafür Close() oder Dispose aufrufen - und dies wird auch bei einer möglichen Exception aufgerufen.