Get all auxiliary directories containing only files

I have a path, and I want to list the subdirectories under it, where each subdirectory does not contain another directory. (Only those subdirectories that do not contain folders, but only files.)

Any smart way to do this?

+7
c #
source share
4 answers

As I understand it, you want to list subdirectories below a given path containing only files.


static IEnumerable<string> GetSubdirectoriesContainingOnlyFiles(string path) { return from subdirectory in Directory.GetDirectories(path, "*", SearchOption.AllDirectories) where Directory.GetDirectories(subdirectory).Length == 0 select subdirectory; } 
+21
source share

DirectoryInfo

 DirectoryInfo dInfo = new DirectoryInfo(<path to dir>); DirectoryInfo[] subdirs = dInfo.GetDirectories(); 
+16
source share

You can use the Directory.GetDirectories method.

However, I'm not sure I understood your question correctly ... could you clarify?

+1
source share

Based on Havard's answer, but a little shorter (and maybe a little easier to read, because it uses !Subdirs.Any() instead of Subdirs.Length == 0 ):

 static IEnumerable<string> GetSubdirectoriesContainingOnlyFiles(string path) { return Directory.GetDirectories(path, "*", SearchOption.AllDirectories) .Where( subdir => !Directory.GetDirectories(subdir).Any() ); } 

Also note that this requires using System.Linq; since it uses the LINQ query language. (And, of course, using System.IO; for the Directory class :))

+1
source share

All Articles