C# 如何在标签中显示硬盘上文件的实际大小?

C# 如何在标签中显示硬盘上文件的实际大小?,c#,winforms,C#,Winforms,我正在使用这种方法: public static long GetFileSizeOnDisk(string file) { FileInfo info = new FileInfo(file); uint dummy, sectorsPerCluster, bytesPerSector; int result = GetDiskFreeSpaceW(info.Directory.Root.FullName,

我正在使用这种方法:

public static long GetFileSizeOnDisk(string file)
        {
            FileInfo info = new FileInfo(file);
            uint dummy, sectorsPerCluster, bytesPerSector;
            int result = GetDiskFreeSpaceW(info.Directory.Root.FullName, out sectorsPerCluster, out bytesPerSector, out dummy, out dummy);
            if (result == 0) throw new Win32Exception();
            uint clusterSize = sectorsPerCluster * bytesPerSector;
            uint hosize;
            uint losize = GetCompressedFileSizeW(file, out hosize);
            long size;
            size = (long)hosize << 32 | losize;
            return ((size + clusterSize - 1) / clusterSize) * clusterSize;
        }
例如,结果是:5074944 但我想让它显示的是,如果它是低的,那么兆字节,然后显示为kb,如果是高的,那么显示为mb或千兆字节,我的意思是,如果5074944是兆字节,那么显示为,例如:5074944 mb 包括MB

或者如何知道显示/写入大小

您应该只使用一些if语句:

long size = GetFileSizeOnDisk(previewFileName);

if(size > 1024 * 1024 * 1024)
{
    label10.Text = (size / 1024 * 1024 * 1024F).ToString() + " Gb";
}
else if(size > 1024 * 1024)
{
    label10.Text = (size / 1024 * 1024F).ToString() + " Mb";
}
else if(size > 1024)
{
    label10.Text = (size / 1024F).ToString() + " Kb";
}
else
{
    label10.Text = size.ToString();
}

编程的好处在于,重复任务可以自动化。自动计算大小的解决方案可以是:

查找文件大小 重复此操作,直到大小大于1024 将大小除以1024 存储大小位置 环 代码可以如下所示:

label10.Text = GetFileSizeOnDisk(previewFileName).ToString();
private String sizeFormatter(Int64 filesize)
{
    var sizes = new List<String> { "B", "KB", "MB", "GB", "TB", "PB" };
    var size = 0;
    while (filesize > 1024)
    {
        filesize /= 1024;
        size++;
    }
    return String.Format("{0}{1}", filesize, sizes[size]);
}
输出为:

312MB
12KB
363B

该方法可以在准确性方面进行优化,但对于一般用途来说,它应该是可以的。

它不是最优化的代码。它只是展示了一种方式。他应该按照自己的方式编码。为什么System.IO.FileInfo.Length属性对您不起作用?
312MB
12KB
363B