Entwickler-Ecke
C# - Die Sprache - rekusive Counter Schleife
lodibach - Di 27.04.10 17:47
Titel: rekusive Counter Schleife
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 :
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
Kha: C#-Tags hinzugefügtModeriert von
Kha: Topic aus WinForms verschoben am Di 27.04.2010 um 17:57
danielf - 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 - 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 - Di 27.04.10 18:08
Dankeschön :D
hat mir echt geholfen :D
*Daumenhoch*
lodibach - 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 - 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:\
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!