スキップしてメイン コンテンツに移動

VC++ エクスプローラーで表示されるようなファイルサイズ文字列( ex. 280 KB )を作成する / StrFormatByteSize

VC++ エクスプローラーで表示されるようなファイルのサイズ文字列( ex. 280 KB )を作成する方法です。

自分で調べた範囲では見つけられず、しかたなく自作するつもりだったのですが、、ソンケイする大先輩から「こんなのあるよ」と教えて頂きました。

改めて、ありがとうございます。助かります。
そして、見つけるコトすら出来なかった自分が情けないです。。

StrFormatByteSize

Windows のシェルAPI / StrFormatByteSizeXX を使います。
シリーズ的な感じで、

とあるみたいですね。

今回は諸事情があって StrFormatByteSizeW を使いました。

使い方はこんなかんじです。

#include <shlwapi.h>

DWORD dwFileSize = GetFileSize(hFile, NULL);

WCHAR szBuf [32];
StrFormatByteSizeW(dwFileSize, szBuf, 32);

エクスプローラーでの表記とは、ビミョウに違うみたいです。

でも、エクスプローラーの表示自体も、どういう仕様なんだか掴みづらいんですよね。。大体3桁で表示されてるんですけど、たまにもっと細かく出てたりして。。

で、面白いのが、StrFormatByteSizeEx にはオプション設定引数に、

SFBS_FLAGS_ROUND_TO_NEAREST_DISPLAYED_DIGIT

ってのがあるんです。

マイクロソフトの中でも、つじつま合わせに苦慮してるのかなーとか、勘ぐっちゃいますね。


参考

http://msdn.microsoft.com/ja-jp/library/windows/desktop/bb759975(v=vs.85).aspx

Amazon Affiliate