按大小顺序显示目录和文件c#
尝试列出计算机上的所有目录和文件,并将它们按大小排序。 我得到了一个文件名及其大小的列表,但它无法将它们按顺序排列。。。非常感谢您的任何建议!干杯按大小顺序显示目录和文件c#,c#,C#,尝试列出计算机上的所有目录和文件,并将它们按大小排序。 我得到了一个文件名及其大小的列表,但它无法将它们按顺序排列。。。非常感谢您的任何建议!干杯 //create instance of drive which contains files DriveInfo di = new DriveInfo(@"C:\"); //find the root directory path DirectoryInfo dirInfo = di.Roo
//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);
}
}
你可以试试这样的
// 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);
//获取您的文件夹
DirectoryInfo di=新的DirectoryInfo(您可以在此处选择路径);
//从该文件夹创建文件列表
List fi=di.GetFiles().ToList();
//按顺序传递文件
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是处理大型集合的理想选择。在这种情况下,我会将工作划分为多个步骤或使用其他方法。除了
ToList
是不必要的(并且在枚举之前强制传递整个集合会影响性能)和嵌套的try-catch
,在给定代码的情况下,它看起来是任意的,我不认为有任何问题会阻止对集合进行排序。它所产生的输出是什么?它与你所期望的有什么不同?是的,我最初没有ToList方法,但它给出了相同的结果。。。它给了我文件的完整列表,但不是按大小顺序排列的。。。但是对于同一文件夹中的所有其他文件,因此在处理它们时,我认为代码假定FileInfo.Length属性值不变。当进程写入文件时,文件确实会更改其长度。对我来说,这可能有多大的危害并不完全清楚,FileInfo中存在一些缓存,在排序时也非常危险。多年来,我一直使用与我的答案类似的代码,来显示许多设计师动态创建的文件夹中的文件。到目前为止没有问题。上载文件并调用列表时,将显示长度为0的文件,并继续下一项。当文件完成上传并刷新屏幕时,它会显示具有适当长度的文件。ToList是多余的。@CSharpie关于ToList在这里是多余的,也许你是对的,但是它满足了等号两边的要求,并且对处理几乎一眨眼就可以显示的数千个文件没有显著影响。为什么检查全名为空?为什么不!你永远不知道人们试图上传什么。举几个例子来说,有些名称显示为不可见或不可访问。此代码在功能上与所显示的代码相同。唯一显著的区别是使用GetFiles
而不是EnumerateFiles
和OrderByDescending
而不是OrderBy
。在所有其他条件相同的情况下,我看不到这段代码产生的结果与OP已经产生的结果不同。