My Solution to iterating over a directory.
Note :
DirectoryInfo info = new DirectoryInfo(folder.FolderPath);
foreach (DirectoryInfo thedir in info.GetDirectories()) // get directories N+1 levels down
{
FolderInfo temp = new FolderInfo();
temp.FolderName = thedir.FullName;
temp.FolderPath = thedir.FullName;
temp.HasChildFolders = false;
//return folders 2 levels down
foreach (DirectoryInfo innerdir in thedir.GetDirectories())//get directories N+2 levels down
{
FolderInfo innertemp = new FolderInfo();
innertemp.FolderName = innerdir.FullName;
innertemp.FolderPath = innerdir.FullName;
if (innerdir.GetDirectories().Length > 0)
{
innertemp.FoldersContained = loadfolder(innertemp);// get directories N+3 levels down ( or N+N levels)
temp.HasChildFolders = true;
}
else
{
innertemp.HasChildFolders = false;
}
temp.FoldersContained.Add(innertemp);
}
result.Add(temp);
} return result;
}
- I'm using the FolderInfo class (which i wrote myself) instead of the DirectoryInfo class as FolderInfo is send over WCF as a result of a call.
- Secondly, Both FolderName and FolderPath are the same value until i get round to writing a regex to get the folder name out of the path.
DirectoryInfo info = new DirectoryInfo(folder.FolderPath);
foreach (DirectoryInfo thedir in info.GetDirectories()) // get directories N+1 levels down
{
FolderInfo temp = new FolderInfo();
temp.FolderName = thedir.FullName;
temp.FolderPath = thedir.FullName;
temp.HasChildFolders = false;
//return folders 2 levels down
foreach (DirectoryInfo innerdir in thedir.GetDirectories())//get directories N+2 levels down
{
FolderInfo innertemp = new FolderInfo();
innertemp.FolderName = innerdir.FullName;
innertemp.FolderPath = innerdir.FullName;
if (innerdir.GetDirectories().Length > 0)
{
innertemp.FoldersContained = loadfolder(innertemp);// get directories N+3 levels down ( or N+N levels)
temp.HasChildFolders = true;
}
else
{
innertemp.HasChildFolders = false;
}
temp.FoldersContained.Add(innertemp);
}
result.Add(temp);
} return result;
}