/ / c # rekursive Suche, um nach einer Dateierweiterung zu suchen - c #, Datei, Suche, Rekursion

c # rekursive Suche, um nach einer Dateierweiterung zu suchen - c #, Datei, Suche, Rekursion

Ich möchte überprüfen, ob eine Datei in dem Verzeichnis, das ich passiere, eine bestimmte Erweiterung hat.

 public static bool ProcessDirectory(string targetDirectory)
{
// Process the list of files found in the directory.
string[] fileEntries = System.IO.Directory.GetFiles(targetDirectory);
foreach (string fileName in fileEntries)
if (System.IO.Path.GetExtension(fileName).ToLower().Contains(pattern))
return true;

// Recurse into subdirectories of this directory.
string[] subdirectoryEntries = System.IO.Directory.GetDirectories(targetDirectory);
foreach (string subdirectory in subdirectoryEntries)
return ProcessDirectory(subdirectory);

return false;
}

Anruf von:

bool foundPattern = false;
//recursive search - based on search pattern
if (System.IO.File.Exists(myDirectory) && System.IO.Path.GetExtension(myDirectory).Contains(pattern))
{
// This path is a file
foundPattern = true;
}
else if (System.IO.Directory.Exists(myDirectory))
{
// This path is a directory
foundPattern = ProcessDirectory(myDirectory);
}

Die Sache ist, ich bekomme keine Ergebnisse (ich verstehefalse, auch wenn Dateien mit der Erweiterung .xzz vorhanden sind, vorausgesetzt, dass ich im Suchmuster nach Erweiterung .x frage - manchmal werde ich wahr, manchmal werde ich falsch.

Wenn ich durchtrete, sehe ich aus, als würde ich Verzeichnisse durchsuchen und rekursiv in sie hineingehen und Dateien durchgehen ...

Aber das tut es nicht.

Antworten:

2 für die Antwort № 1

Ich denke, da ist ein Fehler in Ihrem Code:

// Recurse into subdirectories of this directory.
string[] subdirectoryEntries = System.IO.Directory.GetDirectories(targetDirectory);
foreach (string subdirectory in subdirectoryEntries)
return ProcessDirectory(subdirectory);

Sollte etwas sein wie:

// Recurse into subdirectories of this directory.
string[] subdirectoryEntries = System.IO.Directory.GetDirectories(targetDirectory);
foreach (string subdirectory in subdirectoryEntries)
if (ProcessDirectory(subdirectory))
return true;

Andernfalls geben Sie nur die Ergebnisse für ein einzelnes Unterverzeichnis zurück. Es ist die gleiche Art von Schleife, die Sie am Anfang Ihrer Funktion haben. Sie machen es beim ersten Mal richtig.


3 für die Antwort № 2

Was Sie tun wollen, kann damit leicht gemacht werden

string path = @"C:temp";
string extension = "*.txt";
var files = Directory.GetFiles(path, extension);

//or recursivly
var files = Directory.GetFiles(path, extension, SearchOption.AllDirectories);

In Ihrem Fall:

public static bool ProcessDirectory(string startPath, string pattern)
{
return Directory.GetFiles(startPath, pattern, SearchOption.AllDirectories).Any();
}