代码之家  ›  专栏  ›  技术社区  ›  user240141

将目录结构导出到csv/xl文件

  •  0
  • user240141  · 技术社区  · 14 年前

    我的要求是枚举所有目录和特定的.tif文件(位于结构的末尾)。样品是

                             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
    

    在上面的目录中,A有B和C。命名为客户端。B有D、E、F(日期),D有K和L(家庭)。 所以我需要你的帮助来检索txt或excel文件中的目录结构

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

    类似于c和其他目录。

    2 回复  |  直到 14 年前
        1
  •  0
  •   Oliver    14 年前

    也许这会起作用(或者至少给你一个好的起点):

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

    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();
    }
    
        2
  •  0
  •   Robert Vuković    14 年前

    我不确定我是否理解你想要什么,但这里有一些东西可以让你开始

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

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

    双击生成的文件,Excel可能会打开:)