Peut-être que ce serait faire l'affaire (ou donner au moins un bon point de départ):
public void OutputStructureToFile(string outputFileName, string folder, string searchPattern)
{
using (var file = new StreamWriter(outputFileName))
{
file.Write(GetStructure(new DirectoryInfo(folder), searchPattern));
}
}
public string GetStructure(DirectoryInfo directoryInfo, string searchPattern)
{
return GetStructureRecursive(directoryInfo, searchPattern, 0);
}
private string GetStructureRecursive(DirectoryInfo directoryInfo, string searchPattern, int level)
{
var sb = new StringBuilder();
var indentation = level * 5;
sb.Append(new String(' ', indentation));
sb.AppendLine(directoryInfo.Name);
foreach (var directory in directoryInfo.GetDirectories())
{
sb.Append(GetStructureRecursive(directory, searchPattern, level+1));
}
var groupedByExtension = directoryInfo.GetFiles(searchPattern)
.GroupBy(file => file.Extension)
.Select(group => new { Group = group.Key, Count = group.Count() });
foreach (var entry in groupedByExtension)
{
sb.Append(new String(' ', indentation));
sb.AppendLine(String.Format(" {0,10} {1,3}", entry.Group, entry.Count));
}
return sb.ToString();
}
Et si vous en avez besoin pour Excel comme un fichier .csv, vous devez plutôt utiliser cette fonction récursive
private string GetStructureRecursiveForCsv(DirectoryInfo directoryInfo, string searchPattern, int level)
{
var sb = new StringBuilder();
var indentation = level;
sb.Append(new String(';', indentation));
sb.AppendLine(directoryInfo.Name);
foreach (var directory in directoryInfo.GetDirectories())
{
sb.Append(GetStructureRecursiveForCsv(directory, searchPattern, level+1));
}
var groupedByExtension = directoryInfo.GetFiles(searchPattern)
.GroupBy(file => file.Extension)
.Select(group => new { Group = group.Key, Count = group.Count() });
foreach (var entry in groupedByExtension)
{
sb.Append(new String(';', indentation));
sb.AppendLine(String.Format(";{0};{1}", entry.Group, entry.Count));
}
return sb.ToString();
}
Désolé, mais votre échantillon n'a aucun sens comme écrit. Pourriez-vous l'éditer ou décrire plus en détail ce que vous essayez d'accomplir? – marcind
Etes-vous en train d'exporter une structure de répertoire sous la forme d'un arbre (en colonnes) avec le nombre de fichiers .tif sur les feuilles? Une fonction récursive ou d'analyse syntaxique serait idéale pour cela. Inspiration: http://msdn.microsoft.com/en-us/library/wz42302f.aspx –
Dans le xl ci-dessus, vous nous avez. AH en tant que répertoire racine. Il a un répertoire 20100714. Le 20100714 a plusieurs répertoires ayant le nom abc.fof, def.fof, ghi.fof et ainsi de suite. Ensuite, chaque répertoire .fof a xyz.bat et plusieurs autres répertoires .bat. Chaque répertoire .bat contient des images nommées contenant des images. Donc, ce que je veux, c'est exporter la structure de répertoire indiquée comme ci-dessus. –