Laden...

Array als Parameter

Erstellt von KRambo vor 19 Jahren Letzter Beitrag vor 19 Jahren 1.294 Views
K
KRambo Themenstarter:in
355 Beiträge seit 2004
vor 19 Jahren
Array als Parameter

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?

D
279 Beiträge seit 2004
vor 19 Jahren

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);
				}
			}
		}

K
KRambo Themenstarter:in
355 Beiträge seit 2004
vor 19 Jahren

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 🙂

F
124 Beiträge seit 2004
vor 19 Jahren

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

K
KRambo Themenstarter:in
355 Beiträge seit 2004
vor 19 Jahren

Stimmt iss eigentlich auch nicht schlecht. So kann man sich den doppelten Code sparen.

Danke für eure Hilfe! 🙂