Hallo, habe bei der Suche im Forum leider keine Antwort für folgendes Problem gefunden:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
StreamReader myFile;
try
{
myFile = new StreamReader("Test.txt");
Console.WriteLine(myFile.ReadToEnd());
Console.ReadLine();
myFile.Close();
}
catch (FileNotFoundException e)
{
Console.WriteLine(e.Message);
Console.ReadLine();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.ReadLine();
}
finally
{
myFile.Close();
}
}
}
}
Beim Debuggen kommt die Fehlermeldung: "Verwendung der nicht zugewiesenen lokalen Variablen myFile".
Gelernt habe ich jetzt schon, dass der Compiler die Möglichkeit berücksichtigt, dass die Zuweisung im try-Block nicht ausgeführt wird.
Wenn ich die Variable aber vor dem try-Block initialisiere, kann ich die Exception nicht abfangen. Ist das jetzt nur ein einfacher Denkfehler meinerseits?
Grüße, koller.
ja das ist ein denkfehler weil wenn der Fehler auftritt (kann praktisch nur File not Found sein dann musst du die Datei ja nichtmehr schließen du brauchst also in diesem fall das Final garnicht ich würde es so machen das ich das mit geschachtelten Try catch lösen
Wir Arbeiten eigendlich nicht wir nehmen nur das geld
Danke für Deine Hilfe!
So funktioniert es jetzt natürlich. Gäbe es trotzdem eine Möglichkeit das StreamReader-Objekt mit einem allgemeingültigen Wert zu initialisieren, wie z.B. 0 für einen Integer-Wert, oder "" für einen string?
Oder noch allgemeiner:
Ich möchte eine Objektvariable in einem try-Block initialisieren, jedoch in späteren catch- oder finally-Blöcken noch darauf zugreifen. Geht das? Eine "öffentliche" Vereinbarung im try-Block funktioniert bei mir auch nicht.
Grüße, koller.
so solte es gehen
try
{
Objekt anlegen;
try
{
mach was;
}
catch
{
}
}
catch
{
}
Wir Arbeiten eigendlich nicht wir nehmen nur das geld
Jetzt verstehe ich auch, was Du mit geschachteltem try catch gemeint hast 🤔
Super 👍 und nochmals vielen Dank für Deine Hilfe!
Grüße, Koller.
oder einfach
Stream s = null;
try {
s = new FileStream(...);
...
} finally {
if (s != null) s.Close();
}