如何按文件大小对列表视图进行排序?

时间:2009-02-03 17:47:30

标签: c# sorting file

我有一个包含4列的列表视图 - 名称,扩展名,大小和位置。我有一个方法,以字节为单位的文件大小,并根据需要转换为KB,MB,GB等。示例输出将是1024字节的文件,其打印为“1KB”。然后将该值放在列表视图中。

我需要做的是智能地对size列进行排序。现在排序只是一个简单的比较,所以1025 KB高于1024 MB。我怎样才能让它“尺寸感知”?

我当前的排序代码来自此知识库文章:http://support.microsoft.com/kb/319401 这是我的代码生成文件大小文本:

        public static string getDynamicFileSize(string fileName)
    {
        FileInfo fi = new FileInfo(fileName);
        long sizeInBytes = fi.Length;
        if (sizeInBytes >= 1073741824)
        {
            double sizeInGB = sizeInBytes / Math.Pow(1024, 3);
            return Math.Round(sizeInGB, 2) + " GB";
        }

        if (sizeInBytes >= 1048576)
        {
            double sizeInMB = sizeInBytes / Math.Pow(1024, 2);
            return Math.Round(sizeInMB, 2) + " MB";
        }

        if (sizeInBytes >= 1024)
        {
            double sizeInKB = sizeInBytes / Math.Pow(1024,1);
            return Math.Round(sizeInKB, 2) + " KB";
        }

        //No conversion needed
        return sizeInBytes + " bytes";
    }

谢谢。

2 个答案:

答案 0 :(得分:1)

.NET中的大多数对象都有一个Tag成员。在这里,您可以满足任何额外需要的东西。在您的情况下,我会将文件大小以字节为单位填充到ListViewSubItem.Tag属性中。然后,您的排序算法可以使用它来排序而不是列文本。

答案 1 :(得分:0)

以下答案可能重复。它应该很容易解决你的问题。

How to sort a listview column that contains file size data? C#