Entwickler-Ecke

IO, XML und Registry - Streamreader überprüfen


Svenmania - Di 17.06.08 10:17
Titel: Streamreader überprüfen
Ich habe drei Dateien, die ich mit drei Streamreadern einlese und diese dann mit dem Streamwriter als eine Datei ausgebe. Nur was muss ich einfügen, damit wenn eine Streamdatei fehlt, also nur zwei vorhanden sind, die Aktion trotzdem ausgeführt wird?

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
using (StreamReader sr = new StreamReader(openFileDialog1.FileName))
                using (StreamReader sr1 = new StreamReader(openFileDialog2.FileName))
                using (StreamReader sr2 = new StreamReader(openFileDialog3.FileName))
                using (StreamWriter sw = new StreamWriter(saveFileDialog1.FileName))
                {
                    string line, line1, line2;

                    while ((line = sr.ReadLine()) != null && (line1 = sr1.ReadLine()) != null && (line2 = sr2.ReadLine()) != null)
                    {

                        sw.WriteLine(line + trenner + line1 + trenner + line2);

                    }
                    MessageBox.Show("Convertierung abgeschlossen");
                    tb_file1.Clear();
                    tb_file2.Clear();
                    tb_file3.Clear();
                    tb_file4.Clear();
                }


Moderiert von user profile iconChristian S.: I- durch C#-Tags ersetzt


Th69 - Di 17.06.08 11:18

Du kriegst intern eine Exception, wenn eine der Dateien fehlt (und diese wird dann mittels der using-Direktive gefangen), so daß dann dein innerer Block gar nicht ausgeführt wird.

Du müßtest also selber die StreamReader-Exceptions einzeln fangen (bzw. vorher mit File.Exists abfragen) und dann den StreamReader auf null setzen und dies dann innerhalb deiner Schleife dann für jeden StreamReader einzeln abfragen.

Bisher schreibst du in die Ausgabe-Datei ja solange rein, wie in allen 3 Dateien noch Zeilen da sind. Dies müßtest du dann auch noch abändern.


Svenmania - Di 17.06.08 11:32

Ich bin absoluter Anfänger in C#, ich bin froh das ich das soweit hinbekommen habe, kannst du nicht irgendwie meinen Code verändern?


Kha - Di 17.06.08 13:47

Ersetze die new-Ausdrücke durch eine Hilfsmethode:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
StreamReader TryNewStreamReader(string path)
{
  if (File.Exists(path))
    return new StreamReader(path);
  else
    return null;
}

Bei der Schleife hast du uns noch nicht erklärt, wie der WriteLine-Aufruf mit weniger Dateien aussehen soll, jedenfalls musst du eben, wie Th69 es schon gesagt hat, jeden Reader auf null prüfen.

Mit Arrays oder gar Linq ginge das Ganze natürlich etwas hüpscher, aber wenn ich dir eine Lösung einfach vor den Latz knalle, hat das wahrscheinlich wenig Sinn.


Svenmania - Di 17.06.08 13:53

Also, ich hab das ganze nun gelöst, indem ich über Listen gegangen bin und die dann abgefragt habe, aber vielen Dank, war eine sehr schnelle Hilfe, hier schau ich öfters vorbei!
LG
Svenmania