Hallo Leute
Hab ein kleines Problem und zwar hab ich mir folgende Funktion gebastelt:
// Array-Listen anlegen
private ArrayList sFileList = new ArrayList();
private ArrayList sDirsList = new ArrayList();
private void SearchFiles(string path)
{
// DirInfo Instanz anlegen
DirectoryInfo dirInfo = new DirectoryInfo(path);
// Dateien hinzufügen
sFileList.AddRange(Directory.GetFiles(path));
// Unterverz. durchsuchen
foreach(DirectoryInfo subDirs in dirInfo.GetDirectories())
{
sDirsList.Add(subDirs.FullName);
SearchFiles(subDirs.FullName);
}
}
Funktioniert auch ganz gut, nur möchte ich die Funktion so umbauen, dass ich ihr ein Array von Pfaden übergeben kann und sie mir dann alle Files und Ordner in die ArrayListen schreibt (also nach wie vor selbe Funktion).
private void SearchFiles(string[] path)
{
foreach(string pfad in path)
{
// DirInfo Instanz anlegen
DirectoryInfo dirInfo = new DirectoryInfo(pfad);
// Dateien hinzufügen
sFileList.AddRange(Directory.GetFiles(pfad));
// Unterverz. durchsuchen
foreach(DirectoryInfo subDirs in dirInfo.GetDirectories())
{
sDirsList.Add(subDirs.FullName);
SearchFiles(subDirs.FullName);
}
}
}
Nur hab ich momentan das Problem, dass die Funktion ja selbst wieder aufgerufen wird und zwar mit einem string als parameter, also geht das mit Array ja gar nicht!? Muss doch irgend eine Lösung geben?
Ach da gibt es wohl jede Menge Lösungen 🙂
Du könntest zum einen Natürlich das Array manuell durchgehen und für jeden string die Methode aufrufen un/oder dafür eine extra Methode schreiben, aber du kannst die Methode auch einfach überladen.
Du erstellst also die gleiche Methode mit unterschiedlichen Parametern:
private void SearchFiles(string path)
{
// DirInfo Instanz anlegen
DirectoryInfo dirInfo = new DirectoryInfo(path);
// Dateien hinzufügen
sFileList.AddRange(Directory.GetFiles(path));
// Unterverz. durchsuchen
foreach(DirectoryInfo subDirs in dirInfo.GetDirectories())
{
sDirsList.Add(subDirs.FullName);
SearchFiles(subDirs.FullName);
}
}
private void SearchFiles(string[] path)
{
foreach(string pfad in path)
{
// DirInfo Instanz anlegen
DirectoryInfo dirInfo = new DirectoryInfo(pfad);
// Dateien hinzufügen
sFileList.AddRange(Directory.GetFiles(pfad));
// Unterverz. durchsuchen
foreach(DirectoryInfo subDirs in dirInfo.GetDirectories())
{
sDirsList.Add(subDirs.FullName);
SearchFiles(subDirs.FullName);
}
}
}
Super genau das suche ich. Komme bald in meinem C# Buch (Inside C#) in das Kapitel Überladungen, deshalb kenn ich mich da noch nicht soo aus 🙂
Danke für deine Hilfe 🙂
gleikcher code an mehreren stellen kann böse werden. machs lieber so:
private void SearchFiles(string path)
{
// DirInfo Instanz anlegen
DirectoryInfo dirInfo = new DirectoryInfo(path);
// Dateien hinzufügen
sFileList.AddRange(Directory.GetFiles(path));
// Unterverz. durchsuchen
foreach(DirectoryInfo subDirs in dirInfo.GetDirectories())
{
sDirsList.Add(subDirs.FullName);
SearchFiles(subDirs.FullName);
}
}
private void SearchFiles(string[] path)
{
foreach(string pfad in path)
{
SearchFiles(pfad);
}
}
dann ist der eigentliche code nur in der ersten variante und die zweite variante greift auf die erste zurück
Stimmt iss eigentlich auch nicht schlecht. So kann man sich den doppelten Code sparen.
Danke für eure Hilfe! 🙂