尝试列出计算机上的所有目录和文件,并将其排序为大小。 我得到一个文件名和它们的大小的列表,但它不会按顺序粘贴它们...任何建议非常感谢!干杯
//create instance of drive which contains files
DriveInfo di = new DriveInfo(@"C:\");
//find the root directory path
DirectoryInfo dirInfo = di.RootDirectory;
try
{
//EnumerateFiles increases the performance and sort them
foreach (var fi in dirInfo.EnumerateFiles().OrderBy(f =>f.Length).ToList())
{
try
{
//Display each file
Console.WriteLine("{0}\t\t{1}", fi.FullName, fi.Length);
}
catch (UnauthorizedAccessException UnAuthTop)
{
Console.WriteLine("{0}", UnAuthTop.Message);
}
}
答案 0 :(得分:0)
你可以试试这样的事情
// get your folder
DirectoryInfo di = new DirectoryInfo(you path here);
// create a list of files from that folder
List<FileInfo> fi = di.GetFiles().ToList();
// pass the files in a sorted order
var files = fi.Where(f => f.FullName != null).OrderByDescending(f => f.Length);
在此示例中:如果文件来自当前文件夹级别,则文件将包含一个列表,按file.length排序。
在尝试将fi传递给变量文件之前,您可能想要检查fi是否为null。然后,您可以使用foreach迭代文件。
[更新]
正如@ Abion47所指出的那样,Op的代码与我的解决方案之间似乎没什么区别。根据我在OP中读到的内容,OP没有得到排序列表,这是期望的结果。
我看到的可能会产生影响的是,通过使用EnumerateFiles,您可以开始枚举,并可以在返回整个文件集合之前对文件信息执行操作。它非常适合处理大量文件。而且,比GetFiles更有效,可以在单个文件可用时对其执行操作。
由于是这种情况,您可能无法正确排序返回的文件,直到枚举完整集合为止。
通过使用GetFiles,您必须等待它返回整个集合。使排序更容易。
我不认为GetFiles是处理大量收藏的理想选择。在这种情况下,我会将工作分为几个步骤或使用其他方法。