wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了windows – 将文件大小转换为文本表示大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我正在建立在线文件管理器.它显示的一个列是文件大小,但这总是很大的字节数.我想像 Windows资源管理器一样显示文件大小,使用较小的数字和适当的单位,例如5 MB而不是5000000. 这对我来说并不难,但我想知道Windows而不是内置函数来做到这一点.有没有东西,或者我必须自己动手? 以下是C#中的两个变体(它们需要Windows Vista): ... Console.WriteLine(
@H_489_6@
@H_489_6@
@H_674_15@
我正在建立在线文件管理器.它显示一个列是文件大小,但这总是很大的字节数.我想像 Windows资源管理器一样显示文件大小,使用较小的数字和适当的单位,例如5 MB而不是5000000.

这对我来说并不难,但我想知道Windows而不是内置函数来做到这一点.有没有东西,或者我必须自己动手?

解决方法

以下是C#中的两个变体(它们需要Windows Vista):

...
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;
    }
}
@H_450_43@

大佬总结

以上是大佬教程为你收集整理的windows – 将文件大小转换为文本表示全部内容,希望文章能够帮你解决windows – 将文件大小转换为文本表示所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
猜你在找的wordpress相关文章