2010-07-18 6 views
0

mon exigence est d'énumérer tous les répertoires et les fichiers .tif spécifiques (qui se trouvent à la fin de la structure). L'échantillon estExporter la structure du répertoire dans le fichier csv/xl

      A (path selected from UI) <has> 
        B<has>    and    C<has> 
     D <has>   E   F    G    H  I  J 
K   L<has> 
     1.tif 2.tif 

Dans le répertoire ci-dessus, A a B et C. Nommé en tant que clients. B a D, E, F (comme daté), D a K et L (famille). ineed Alors votre aide pour récupérer la structure de répertoire dans txt ou Excel fichier comme

B     D 
         K 0 
         L 2 (since there are two tif files) 


        E 
        F 

similairement pour c et d'autres répertoires.

+0

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

+0

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 –

+0

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. –

Répondre

1

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(); 
} 
1

Je ne suis pas sûr que je comprends ce que vous voulez, mais voici quelque chose qui pour vous lancer

private static void ProcessFolder(string folder, string level, string separator, StreamWriter output) 
    { 
     var dirs = Directory.GetDirectories(folder); 
     foreach (var d in dirs) 
     { 
      output.Write(level); 
      output.WriteLine(d); 
      ProcessFolder(d, level + separator, separator, output); 
     } 
     Console.WriteLine(); 
     var files = Directory.GetFiles(folder); 
     foreach (var f in files) 
     { 
      output.Write(level); 
      output.WriteLine(f); 
     } 
    } 

Vous devrez personnaliser pour filtrer TIFF ou tout ce que vous voulez. Vous pouvez appeler cette fonction comme celui-ci et il va générer le fichier

 using (var output = new StreamWriter(@"C:\test.csv")) 
     { 
      ProcessFolder(@"c:\Program files", "", ";", output); 
     } 

Double-cliquez sur le fichier généré et Excel sera probablement ouvert :)

Questions connexes