列表框,按文件大小排序

时间:2018-03-26 16:33:31

标签: c#

我正在尝试使用目录中的文件填充列表框,但我想通过filesize对它们进行排序。我在哪里做这个条件? Inisde字符串或foreach语句?

{{1}}

2 个答案:

答案 0 :(得分:1)

稍微修改你的LINQ。

  1. 首先选择FileInfo,以便后续的LINQ子句可以访问其属性
  2. 过滤FileInfo的名称和日期
  3. 按FileInfo的长度排序
  4. 选择要转换回字符串的完整路径
  5. 示例:

        string[] files = Directory.GetFiles(FBD.SelectedPath, "*.xls")
            .Select( path => new FileInfo(path) )
            .Where
            ( 
                info => info.CreationTime.Date >= DateTime.Today.Date 
                     && info.Name.Contains("AA") 
            )
            .OrderByDescending(info => info.Length )
            .Select( info => info.FullName )
            .ToArray();
    

答案 1 :(得分:1)

在这种情况下,我会使用DirectoryInfo.GetFiles(或更好,.EnumerateFiles)而不是Directory,因为您对扩展文件属性感兴趣。这样,每次要检查文件属性(如FileInfoCreationTime)时,都不需要创建多个新Length对象:

FileInfo[] files = new DirectoryInfo(FDB.SelectedPath)
    .EnumerateFiles("*.xls")
    .Where(file => file.CreationTime.Date >= DateTime.Today
                   && file.Name.Contains("AA"))
    .OrderBy(file => file.Length)
    .ToArray();

如果在初始查询之后不需要完整的FileInfo对象属性,那么您只需选择FullName属性来获取字符串数组:

string[] files = new DirectoryInfo(FDB.SelectedPath)
    .EnumerateFiles("*.xls")
    .Where(file => file.CreationTime.Date >= DateTime.Today
                   && file.Name.Contains("AA"))
    .OrderBy(file => file.Length)
    .Select(file => file.FullName)  // Gets only the full path and file name
    .ToArray();