{C#·文件大小格式转换}

 转自Stackoverflow:http://stackoverflow.com/questions/128618/c-file-size-format-provider

public class FileSizeFormatProvider : IFormatProvider, ICustomFormatter 
{ 
    public object GetFormat(Type formatType) 
    { 
        if (formatType == typeof(ICustomFormatter)) return this; 
        return null; 
    } 
 
    private const string fileSizeFormat = "fs"; 
    private const Decimal OneKiloByte = 1024M; 
    private const Decimal OneMegaByte = OneKiloByte * 1024M; 
    private const Decimal OneGigaByte = OneMegaByte * 1024M; 
 
    public string Format(string format, object arg, IFormatProvider formatProvider) 
    {     
        if (format == null || !format.StartsWith(fileSizeFormat))     
        {     
            return defaultFormat(format, arg, formatProvider);     
        } 
 
        if (arg is string)     
        {     
            return defaultFormat(format, arg, formatProvider);     
        } 
 
        Decimal size; 
 
        try     
        {     
            size = Convert.ToDecimal(arg);     
        }     
        catch (InvalidCastException)     
        {     
            return defaultFormat(format, arg, formatProvider);     
        } 
 
        string suffix; 
        if (size > OneGigaByte) 
        { 
            size /= OneGigaByte; 
            suffix = "GB"; 
        } 
        else if (size > OneMegaByte) 
        { 
            size /= OneMegaByte; 
            suffix = "MB"; 
        } 
        else if (size > OneKiloByte) 
        { 
            size /= OneKiloByte; 
            suffix = "kB"; 
        } 
        else 
        { 
            suffix = " B"; 
        } 
 
        string precision = format.Substring(2); 
        if (String.IsNullOrEmpty(precision)) precision = "2"; 
        return String.Format("{0:N" + precision + "}{1}", size, suffix); 
 
    } 
 
    private static string defaultFormat(string format, object arg, IFormatProvider formatProvider) 
    { 
        IFormattable formattableArg = arg as IFormattable; 
        if (formattableArg != null) 
        { 
            return formattableArg.ToString(format, formatProvider); 
        } 
        return arg.ToString(); 
    } 
} 


 

使用方法:

1.

Console.WriteLine(String.Format(new FileSizeFormatProvider(), "File size: {0:fs}", 100)); 
Console.WriteLine(String.Format(new FileSizeFormatProvider(), "File size: {0:fs}", 10000)); 

2.

public static class ExtensionMethods 
{ 
    
public static string ToFileSize(this long l) 
    
{ 
        
return String.Format(new FileSizeFormatProvider(), "{0:fs}", l); 
    
} 
} 
3.

long l = 100000000; 
Console.WriteLine(l.ToFileSize()); 

另一种比较好的方法:

[DllImport("Shlwapi.dll", CharSet = CharSet.Auto)] 
public static extern long StrFormatByteSize( long fileSize, [MarshalAs(UnmanagedType.LPTStr)] StringBuilder buffer, int bufferSize ); 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值