Laden...

Nicht alle Codepfade geben einen.... die 1000.te

Erstellt von Luis_80 vor 16 Jahren Letzter Beitrag vor 16 Jahren 3.600 Views
L
Luis_80 Themenstarter:in
14 Beiträge seit 2007
vor 16 Jahren
Nicht alle Codepfade geben einen.... die 1000.te

Hallo zusammen,

ich bekomme bei folgendem Codebeispiel immer die Fehlermeldung, dass nicht alle Codepfade einen wert zurück liefern.

Was mache ich denn da bitte falsch?

Danke für die Antworten!

Gruß
Luis

public string  DirSearch1(string sDir)
        {
            
            try
            {
                foreach (string d in Directory.GetDirectories(sDir))
                {
                   foreach (string f in Directory.GetFiles(d))
                    {
                        return f;
                    }
                    DirSearch1(d);
                }
            }
            catch (System.Exception excpt)
            {
                Console.WriteLine(excpt.Message);
            }
        }

189 Beiträge seit 2006
vor 16 Jahren

Hallo,

sollte ein Fehler auftreten, springt er in den catch-Block. Im Catch Block gibt es aber kein Return. Wenn ein Rückgabetyp definiert ist, muss aber **immer **etwas zurückgegeben werden.

knub

L
Luis_80 Themenstarter:in
14 Beiträge seit 2007
vor 16 Jahren

Hi,

das tut er allerdings auch ohne try und catch also bei folgendem Beispiel.

Sorry, hätte direkt den Codeausschnitt nehmen sollen.

public string  DirSearch1(string sDir)
        {
            
           
                foreach (string d in Directory.GetDirectories(sDir))
                {
                   foreach (string f in Directory.GetFiles(d))
                    {
                        return f;
                    }
                    DirSearch1(d);
                }
            
           
        }
2.223 Beiträge seit 2005
vor 16 Jahren

hallo Luis_80 und herzlich willkommen,

es könnte ja passieren das er in dene schleifen gar nicht rein geht

in meinen augen macht dieser code ausschnitt sowiso kein sinn

schreib doch mal bitte was dieser code machen soll

mfg

A
254 Beiträge seit 2007
vor 16 Jahren

Hi,

nenn mich Fantasie los, aber was soll die Methode eigentlich machen ?

L
Luis_80 Themenstarter:in
14 Beiträge seit 2007
vor 16 Jahren

Eine rekursive Suche durch alle Ordner und Unterordner.

ich will damit an jede Einzelnen Dateipfa kommen um eine andere Datei damit vergleichen zu können.

Um mir alle Dateien listen zu lassen sähe das dann so aus.

public void  DirSearch1(string sDir)
        {
            
            try
            {
                foreach (string d in Directory.GetDirectories(sDir))
                {
                   foreach (string f in Directory.GetFiles(d))
                    {
                        Console.WriteLine(f);
                    }
                    DirSearch1(d);
                }
            }
            catch (System.Exception excpt)
            {
                Console.WriteLine(excpt);
                
            }
        }

Ich möchte aber mit allen Ausgaben arbeiten können.
Ist das so falsch gedacht.

A
254 Beiträge seit 2007
vor 16 Jahren

Hi,

wie findet ihr diesen Versuch ?

   public static List<string> DirSearch1(string sDir)
        {
            try
            {
                List<string> retVal = new List<string>();
                
                foreach (string f in Directory.GetFiles(sDir))
                    retVal.Add(f);

                foreach (string d in Directory.GetDirectories(sDir))
                    retVal.AddRange(DirSearch1(d));
                   
                return retVal;
            }
            catch (System.Exception excpt)
            {
                Console.WriteLine(excpt);
                return null;
            }
        } 
L
Luis_80 Themenstarter:in
14 Beiträge seit 2007
vor 16 Jahren

Das werde ich auch mal ausprobieren!

Versteh aber nach wie vor nicht wo der Fehler bei meinem Beispiel liegt, selbst wenn ich im catch block einen string ausgeben lasse funktioniert es nicht.

Vielen Dank an alle und einen schönen Abend noch

Gruß

Luis

A
48 Beiträge seit 2006
vor 16 Jahren

Hallo Luis_80,

es geht ja nicht darum einen string auszugeben, sondern ihn mit einem return zurückzugeben.
Denn wenn du für deine Methode einen Rückgabetyp definierst muss auch gewährleistet sein, dass die Methode etwas zurückgibt.
In deinem Beispiel könnte es ja theoretisch passieren, dass im try Block ein Fehler auftritt, und zwar VOR der return-Anweisung. Da im catch-Block kein return da ist würde die Methode dann keinen Wert zurückgeben.
Also musst du in den catch-block einen return einbauen, der beispielsweise null zurückgibt. [vgl. Beispiel von a957m].

mfg Atlan

L
Luis_80 Themenstarter:in
14 Beiträge seit 2007
vor 16 Jahren

Hatte ich auch gemacht, nur nach dem Catch block fehlte noch eine.

Die Methode von a957m ist aber eh viel schöner besser zu verwursten 😉

E
124 Beiträge seit 2006
vor 16 Jahren

Hatte ich auch gemacht, nur nach dem Catch block fehlte noch eine.

Ja, hat aber Blackcoin oben schon geschrieben. Wenn Directory.GetDirectories(sDir) oder Directory.GetFiles(d) leer ist, kommt er nie zum return.

Grüße
Elric