{C#·文件大小格式转换}
2011-07-03 09:02
399 查看
转自Stackoverflow:http://stackoverflow.com/questions/128618/c-file-size-format-provider
使用方法: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 );
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 );
相关文章推荐
- C#转换文件大小格式(GB/MB/KB/B)
- C#:将.csv格式文件转换成.xlsx格式文件
- Windows & Unix 文件格式差异及win2unix转换脚本
- C#/Vb.net 将PDF 转换为SVG文件格式
- C# 资源文件格式转换
- C#使用适合阅读的格式显示文件大小
- VS2013下 关于解决检测到 Mac 文件格式: 请将源文件转换为 DOS 格式或 UNIX 
- vi 转换文件格式
- C#调用OpenOffice转换多格式文件到PDF
- Windows & Unix 文件格式之迷, 空格、回车换行、tab 转换及其相关工具
- C#文件上传"不支持给定路径的格式"
- C# 将html实体编码转换到正常字符 & #40;格式
- C#检查目录下所有文件的编码格式并转换为UTF8格式
- ·Lucene索引文件格式(中文版,有chris翻译)
- C# 将PDF文件转换为word格式
- Windows & Unix 文件格式之迷, 空格、回车换行、tab 转换及其相关工具 .
- C# Tips: 将 VS2012 / VS2013 的.sln文件、project文件转换成 VS2010格式
- C# Tips: 将 VS2012 / VS2013 的.sln文件、project文件转换成 VS2010格式
- C# .csv文件转为Excel格式;Excel格式转换为.csv
- C#生成音频文件以及转换成需要的格式