对于每个目录(包括子目录(,我想获取其中的文件并将它们放在列表中。
我知道有这样的东西:
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);
希望这有帮助