大佬教程收集整理的这篇文章主要介绍了windows – 将文件大小转换为文本表示,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这对我来说并不难,但我想知道Windows而不是内置函数来做到这一点.有没有东西,或者我必须自己动手?
... Console.WriteLine(FormatByteSize(1031023120)); // 983 MB Console.WriteLine(FormatByteSize2(1031023120,truE)); // 1 006 859 KB ...
请注意,使用Windows的好处(或不方便,具体取决于您的使用方式)是使用SHell / OS文化获得本地化版本(如果有).
public static String FormatByteSize2(long size,bool alwaysKb = falsE) { // Here,we use Windows SHell's size column deFinition and formatTing // note although System.Size is defined as a UInt64,formatTing doesn't support more than long.MaxValue... PSGetPropertyKeyFromname("System.Size",out var pk); var pv = new PROPVARIANT(sizE); var sb = new StringBuilder(128); const int PDFF_ALWAYSKB = 4; PSFormatForDisplay(ref pk,pv,alwaysKb ? PDFF_ALWAYSKB : 0,sb,sb.Capacity); return sb.ToString(); } public static String FormatByteSize(long sizE) { // Here,we use use a Windows SHell API (probably the sames algorithm underneath) // It's much simpler,we only need to declare one StrFormatByteSizeW API var sb = new StringBuilder(128); StrFormatByteSizeW(size,sb.Capacity); return sb.ToString(); } [DllImport("shlwapi",CharSet = CharSet.UnicodE)] private static extern IntPtr StrFormatByteSizeW(long qdw,[MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszBuf,int cchBuf); [DllImport("propsys",CharSet = CharSet.UnicodE)] private static extern int PSFormatForDisplay( ref PROPERTYKEY propkey,PROPVARIANT pv,int pdfFlags,CharSet = CharSet.UnicodE)] private static extern int PSGetPropertyKeyFromname([MarshalAs(UnmanagedType.LPWStr)] String pszName,out PROPERTYKEY ppropkey); [StructLayout(LayoutKind.Sequential)] private struct PROPERTYKEY { public Guid fmtid; public int pid; } [StructLayout(LayoutKind.Sequential)] private class PROPVARIANT { // note this version of PROPVARIANT is far from being suited for all purposes... public short vt; short wReserved1; short wReserved2; short wReserved3; public long val; const short VT_UI8 = 21; public PROPVARIANT(long ul) { wReserved3 = wReserved2 = wReserved1 = 0; val = ul; vt = VT_UI8; } }
以上是大佬教程为你收集整理的windows – 将文件大小转换为文本表示全部内容,希望文章能够帮你解决windows – 将文件大小转换为文本表示所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。