Autor Beitrag
Svenmania
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 17.06.08 10:17 
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?
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 17.06.08 13:47 
Ersetze die new-Ausdrücke durch eine Hilfsmethode:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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