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



对于每个目录(包括子目录(,我想获取其中的文件并将它们放在列表中。

我知道有这样的东西:

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

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

我想

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

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

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

你可以做这样的事情:

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
}

您可以对文件进行排序:

首先,通过名称,使目录中的所有文件彼此相邻。

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

像这样使用它:

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

希望这有帮助

最新更新