Reputation: 485
I have a directory which contains many subdirectories. For example:
Emp1
Acc
profile
pro1.xml
pro2.xml
data
Emp2
Acc
profile
pro1.xml
pro2.xml
data
Emp3
Acc
profile
pro1.xml
pro2.xml
data
I want to write a foreach loop so I get only files which reside in the profile folder. For example:
foreach string filename in directory.getdirectories(filepat){
//code.
}
Can someone please help me create a search pattern to do this?
Upvotes: 0
Views: 144
Reputation: 9394
Maybe you could try something like the following:
IEnumerable<string> directories = Directory.GetDirectories("PATH", "*.*", SearchOption.AllDirectories).Where(d => d == "ProfileFolder");
foreach (string directory in directories)
{
string[] files = Directory.GetFiles(directory, "*.*", SearchOption.TopDirectoryOnly);
}
Upvotes: 0
Reputation: 34248
I wrote some fluent extensions to files and directories that let you do this nicely with linq, Take a look here: http://blog.staticvoid.co.nz/2011/11/staticvoid-io-extentions-nuget.html
or download from nuget using Install-Package StaticVoid.Core.IO
diretory.Directories().SelectMany(d =>
d.Directory(di => di.Name == "Acc")
.Directory(di => di.Name == "profile").Files());
Upvotes: 1
Reputation: 4445
EDIT after Question Edited....
var directoryInfo = new DirectoryInfo(@"c:\temp\stackoverflow");
foreach (var element in dinfo.GetDirectories(@"profile", SearchOption.AllDirectories).SelectMany(x => x.GetFiles()))
{
Console.WriteLine (element);
}
Like this?
Upvotes: 1
Reputation: 2407
It may be what you want...
string [] dirname = Directory.GetDirectories(path){
foreach( string s in dirname)
{
if(s.Contains("profile"))
{
//do your work
}
}
Upvotes: 0