I want to get all directories that match a search-pattern with a wildcard mid in the path, e.g.
C:\\folder1\\folder2\\*\\nextFolder\\lastFolder
Is there any chance to get them with a function-call?
I've tried to use DirectoryInfo.GetDirectories()
,
but it seems, that for this function a wildcard is only allowed inside the last part of the path, as in:
C:\\folder1\\folder2\\folder3\\nextFolder\\last*
or
C:\\folder1\\folder2\\folder3\\nextFolder\\*
Here some additional information and the sourcecode I used with the given feedback: Environment: Windows, Visual Studio 2022, .NET Framework 4.6.2 Existing directories: C:\MESDataTransfer\Csv_Cnc_to_Mes_Prod\job\ABD\MultiParts01 C:\MESDataTransfer\Csv_Cnc_to_Mes_Prod\job\BHX500\MultiParts01 As result I get directoryPaths.Message = "Die Anfrage ist ungültig" and directoryPaths.ErrorCode = InvalidQuery. Same error, if I replace "%" with a existing foldername "ABD". Is the syntax of @"\.\ROOT\cimv2" for ManagementScope correct? Seems to be the value for UTF16. Is this always correct?
var scope = new ManagementScope(@"\\.\ROOT\cimv2");
string[] selectProps = { "Path" };
var query = new SelectQuery("Win32_Directory",
@"Drive = 'C:' and Path Like 'MESDataTransfer\Csv_Cnc_to_Mes_Prod\job\%\MultiParts01'",
selectProps);
using (var searcher = new ManagementObjectSearcher(scope, query))
{
using (var instances = searcher.Get())
{
var directoryPaths = instances.Cast<ManagementObject>().Select(mo => mo["Path"]);
// enumerate the collection.
int nCount = 0;
foreach (string directoryPath in directoryPaths)
{
//Console.WriteLine(directoryPath);
string asString = directoryPath.ToString();
++nCount;
}
}
}
You could do it with a WMI directory query.
It accepts wildcards for any part of the path, not just for the token at the end, aka the name.
The pendant for the Win32 '*' wildcard is a '%'.
If you need more details of the directories returned, than just the "Path" itself, you can add the properties wanted to the 'selectProps' array. Win32_Directory has about the same set of properties, if not more, as System.IO.DirectoryInfo has: https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-directory