Autor Beitrag
lodibach
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Di 27.04.10 17:47 
Hallo, ich habe ein Problem. Ich möchte eine rekusive Schleife erstellen, die alle .mp3 Dateien in einem Ordner (auch mit Unterordner) ausließt. Bis jetzt habe ich den Code :

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
CUtils.GetMP3Count(new DirectoryInfo(sEingabeordner), 0);




        public static int GetMP3Count(FileSystemInfo oFileSystemInfo, int iMP3Count)
        {
            var oDirInfo = oFileSystemInfo as DirectoryInfo;

            if (oDirInfo != null)
            {
                foreach (var oDirEntry in oDirInfo.GetFileSystemInfos())
                {
                    GetMP3Count(oDirEntry, iMP3Count);
                }
            }
            else
            {
                if (oFileSystemInfo.Name.EndsWith("mp3"))
                {
                    iMP3Count += 1;
                }
            }
            
            return iMP3Count;
        } // 

    } // 
//


Doch bei "GetMP3Count(oDirEntry, iMP3Count);" setzt sich iMP3Count immerwieder auf 0. Wie kann ich das umgehen?

Moderiert von user profile iconKha: C#-Tags hinzugefügt
Moderiert von user profile iconKha: Topic aus WinForms verschoben am Di 27.04.2010 um 17:57
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Di 27.04.10 18:01 
Hallo und :welcome:,

das liegt daran, dass du das Ergebnis der unteren Verzeichnissen verwirfst. Bei GetMP3Count(oDirEntry, iMP3Count); untersuchst du ja ob in einem Unterverzeichnis Dateien mit der Endung mp3 liegen. Das Ergebnis ignorierst du aber. Zähl das Ergebnis zu deiner iMP3Count variable dazu und schon kann die Methode zählen ;)

Gruß

PS: Über Bereiche C# und dann auf + kannst du Code als solchen formatieren
und es gibt bereits eine Funktion von der Directory Klasse (Directory.GetFiles(pfad, extension, SearchOption.AllDirectories))
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 27.04.10 18:06 
Ebenfalls :welcome:

Der Parameter wird By Value übergeben. Wenn du im rekursiven Aufruf die dortige lokale Variable erhöhst, wirkt sich das nicht auf die Variable des aufrufenden Codes aus. Wenn du den Parameter mit ref deklarierst, wird er stattdessen By Reference übergeben.
Aber wie von Daniel vorgeschlagen wäre es einfacher, über den Rückgabewert zu gehen. Dann brauchst du iMP3Count gar nicht mehr als Parameter, sondern kannst dafür auch eine lokale Variable, die du mit 0 initialisierst, verwenden.

Und bitte, bitte keine ungarische Notation verwenden :) .

_________________
>λ=
lodibach Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Di 27.04.10 18:08 
Dankeschön :D
hat mir echt geholfen :D
*Daumenhoch*
lodibach Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Di 27.04.10 18:20 
ähm.. noch ne Frage... Bin noch nich lang dabei...
Wie kann ich mir mit der Klasse Directory die Anzahl als Integer speichern?
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Di 27.04.10 19:21 
Mit Directory.GetFiles(@"C:\", "*.mp3", SearchOption.AllDirectories) bekommst du Daten vom Typ string Array zurück. Genauer eine Array mit den Dateinamen als Zeichenkette. Ein Array hat standardgemäß öffentliche Methoden und einige Eigentschaften (sogenannte Properties). Ein von diesen Eigenschaften heißt Length und gibt die Anzahl an Elementen die sich in diesem Array befindet zurück. In deinem Fall die Anzahl an Mp3 Dateien relativ zum Verzeichnis c:\