【问题标题】:Get files from directories [including subdirectories] C#从目录[包括子目录] C# 获取文件
【发布时间】:2017-08-24 12:13:10
【问题描述】:

对于每个目录(包括子目录),我想将其中的文件放入一个列表中。

我知道有类似的东西:

string[] files;
files = Directory.GetFiles(fbd.SelectedPath, "*", SearchOption.AllDirectories);

问题是我想在每个目录(或子目录)之后停止并以某种方式对其中的文件进行排序。上面的选项只是把所有文件都拿走。

【问题讨论】:

  • 全部搞定后为什么不排序呢?你的意思是什么类型的?
  • 您可以按目录路径对完整列表进行分组。像这样files.GroupBy(x => Path.GetDirectoryName(x));,然后对这些组做任何你想做的事情
  • @AshkanMobayenKhiabani Natural 对每个目录的文件进行排序,而不是全部排序。
  • XY 问题。从我们看到的情况来看,在每个文件夹之后排序与在获取所有之后排序没有什么不同,那么究竟是什么原因需要在每个文件夹之后排序,也许这才是真正的问题?
  • @gilliduck 正是我说的原因 - and than do what ever you want with those groups 在我的评论中,如果它只是关于排序肯定没有意义

标签: c# file sorting directory subdirectory


【解决方案1】:

我想在每个目录(或子目录)之后停止并以某种方式对其中的文件进行排序。

如果我明白你想要什么,你需要这样的东西:

public class DirectoryFiles
{
    public DirectoryFiles(string currentDir)
    {
        CurrentDir = currentDir;
        Files = Directory.GetFiles(currentDir, "*", SearchOption.TopDirectoryOnly)
            .OrderBy(o=> o);
        Directories = Directory.GetDirectories(currentDir)
            .Select(c => new DirectoryFiles(c))
            .OrderBy(o=> o.CurrentDir);
    }

    public string CurrentDir { get; private set; }

    //// list of files in this directory
    public IEnumerable<string> Files { get; private set; }

    //// list of directories in this directory
    public IEnumerable<DirectoryFiles> Directories { get; private set; }
}

用途:

var d = new DirectoryFiles(fbd.SelectedPath);

【讨论】:

    【解决方案2】:

    你可以这样做:

    string[] fols = files.GroupBy(f => Path.GetDirectoryName(f)).ToArray();
    for(int i=0;i<fols.Length;i++){
         //You have each folders files in fols[i] nd you can sort it
    }
    

    【讨论】:

    • GroupBy 返回一个IEnumerable&lt;Grouping&lt;string, string&gt;&gt;。您必须拨打ToList 或使用foreach 循环
    • 我总是并且总是忘记它。与 Visual Studio 不同,您不会在这里了解您的错误;)
    • 您可以随时使用C# interactivedotnetfiddle 等在线编译器在发布之前检查代码
    【解决方案3】:

    您可以对文件进行排序:

    首先,按名称,以便目录中的所有文件彼此相邻。

    其次,通过您的其他参数(假设文件大小)

    像这样使用它:

    files = Directory.GetFiles(fbd.SelectedPath, "*", SearchOption.AllDirectories)
                                 .OrderBy(f => new FileInfo(f).FileName).ThenBy(f => new FileInfo(f).Length);
    

    希望对你有帮助

    【讨论】:

    • .OrderBy(f =&gt; f.FileName)这里的f是一个字符串,不包含FileName属性
    猜你喜欢
    • 2021-10-30
    • 1970-01-01
    • 2013-08-09
    • 2017-05-30
    • 1970-01-01
    • 2017-10-08
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多