从目录[包括子目录]获取文件C#

时间:2017-08-24 12:13:11

标签: c# file

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

我知道有类似的东西:

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

事情是我想在每个目录(或子目录)之后停止并以某种方式对其中的文件进行排序。上面的选项只是简单地获取所有文件。

3 个答案:

答案 0 :(得分:2)

  

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

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

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

答案 1 :(得分:1)

您可以这样做:

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
}

答案 2 :(得分:0)

您可以对文件进行排序:

首先,按名称使目录中的所有文件都紧挨着。

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

像这样使用:

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

希望这有帮助