C# 如何按文件大小对listview排序?

C# 如何按文件大小对listview排序?,c#,sorting,file,C#,Sorting,File,我有一个包含4列的列表视图——名称、扩展名、大小和位置。我有一个方法,它以字节为单位获取文件大小,并根据需要转换为KB、MB、GB等。例如,输出为1024字节的文件,打印为“1KB”。然后将该值放置在listview中 我需要做的是对大小列进行智能排序。现在排序只是一个简单的比较,所以1025KB比1024MB高。我怎样才能让它“知道大小” 我当前的排序代码来自这篇KB文章: 下面是生成文件大小文本的代码: public static string getDynamicFileS

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

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

我当前的排序代码来自这篇KB文章: 下面是生成文件大小文本的代码:

        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";
    }

谢谢。

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

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