ページ 11

フォルダのサイズは・・・

Posted: 2012年4月30日(月) 12:33
by だんごさん
度々お世話になります。

ふと感じたことがあります。DxLib関数にはファイルのサイズを読み取る、
FileRead_sizeという関数があります。
では・・・

もしもアプリと同じフォルダに画像ファイルがあったとします。
dataファイルを開くと画像やら音楽やらのデータがあるということです。
その画像やらのサイズ(縦幅とかではなく)を知るためにはどうしますか?
先ほど書いた、FileRead_size関数で画像一つ一つのサイズを得ますか?

えーと、つまりそのファイルの中にある画像やらのサイズをまとめて知ることができる、
そのフォルダごとサイズを得る、良い方法はありませんか?

説明下手ですみません;;

Re: フォルダのサイズは・・・

Posted: 2012年4月30日(月) 13:18
by ぱにしん
ファイルの名前と数が事前に分かっている、という前提で答えさせていただきますが、構造体を作ってループさせる方法が楽なんじゃないかなと思います。
私には他に思いつかないんですが、もっと良い方法があるかもしれません。

とりあえずコードを

コード:

#include "DxLib.h"

struct FileList_t{
	int Num;
	char *pFileName;
};

const struct FileList_t FileList[5]={
	{0,"test1.png"},
	{1,"test2.png"},
	{2,"test3.png"},
	{3,"test4.png"},
	{4,"test5.png"},
};

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); 
        // while( 裏画面を表画面に反映, メッセージ処理, 画面クリア )
		int Size[5];
	
        while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){
			char pPath[256];
			clsDx();
			for(int i=0;i<5;i++){
				sprintf(pPath,"Data/Image/%s",FileList[i].pFileName);
				Size[i]=FileRead_size(pPath);	
				printfDx("Size[%d]=%d\n",i,Size[i]);
			} 
        }
        DxLib_End(); // DXライブラリ終了処理
        return 0;
}  
尚、このプログラムはDixqさんがオープンソースで開発なさっている「四聖龍神録Plus・次回作」のソースの一部(画像ファイルの読み込みの部分)を改変したものです。

追記
元のプログラムではenumを使ってさらに分かりやすくなっているので、元のソースを読まれることをお勧めします。
龍神録プログラミングの館(一番下)

追追記
知られたいのはフォルダのサイズでしたね、失礼しました・・・

Re: フォルダのサイズは・・・

Posted: 2012年4月30日(月) 13:19
by softya(ソフト屋)
ディレクトリを探索して、ファイルサイズを得る方法もあります。
「FindFirstFile 関数」
http://msdn.microsoft.com/ja-jp/library/cc429233.aspx

この関数で使うWIN32_FIND_DATA構造体にファイルサイズが格納されます。
「WIN32_FIND_DATA構造体」
http://www.hozugawa.net/winapi/struct_W ... _DATA.html

Re: フォルダのサイズは・・・

Posted: 2012年4月30日(月) 15:01
by だんごさん
ぱにしん さんが書きました:

コード:

const struct FileList_t FileList[5]={
    {0,"test1.png"},
    {1,"test2.png"},
    {2,"test3.png"},
    {3,"test4.png"},
    {4,"test5.png"},
};
確かに良い方法ですが、これが何百もあったとすると大変ですね・・・。

とりあえず、まとめて調べてくれる関数は無く、コツコツ自分で書くしかない
ということですかねー・・・

Re: フォルダのサイズは・・・

Posted: 2012年5月01日(火) 01:04
by ぱにしん
「ディレクトリ サイズ C++」で検索したらトップに出てきましたが・・・
読んでない(正確には読むスキルが無い)のでだんごさんが求めていらっしゃるのがこれかどうか判断しかねます・・・
http://d.hatena.ne.jp/yu-hr/20100319/1269021687
オフトピック
個人のサイトを「ここ参考になるんじゃない?」って貼り付けるだけというのはどうなんだろう・・・

Re: フォルダのサイズは・・・

Posted: 2012年5月01日(火) 01:44
by Ryo
だんごさん さんが書きました: えーと、つまりそのファイルの中にある画像やらのサイズをまとめて知ることができる、
そのフォルダごとサイズを得る、良い方法はありませんか?
一行目は「ファイルの中にある」とありますが、フォルダの中にあるの間違いでしょうか?
#アーカイブや圧縮されたものも分解・解凍状態でのサイズほしいとかも含むのかな?と

フォルダのサイズを測るのは、
サブフォルダも含めたファイル全検索の際にサイズを足していく方法しかないと思います。
エクスプローラでかなり多数のファイルが入ってるフォルダのプロパティを開くと
積算されていくのが見れますから、一瞬で答えがかえってくるようなものは用意されてないようです。

Re: フォルダのサイズは・・・

Posted: 2012年5月01日(火) 11:02
by softya(ソフト屋)
ぱにしん さんが書きました:「ディレクトリ サイズ C++」で検索したらトップに出てきましたが・・・
読んでない(正確には読むスキルが無い)のでだんごさんが求めていらっしゃるのがこれかどうか判断しかねます・・・
http://d.hatena.ne.jp/yu-hr/20100319/1269021687
オフトピック
個人のサイトを「ここ参考になるんじゃない?」って貼り付けるだけというのはどうなんだろう・・・
それは私の提示したFindFirstFile 関数を使ったものですね。

Re: フォルダのサイズは・・・

Posted: 2012年5月01日(火) 18:32
by だんごさん
Ryo さんが書きました:
だんごさん さんが書きました: えーと、つまりそのファイルの中にある画像やらのサイズをまとめて知ることができる、
そのフォルダごとサイズを得る、良い方法はありませんか?
一行目は「ファイルの中にある」とありますが、フォルダの中にあるの間違いでしょうか?
#アーカイブや圧縮されたものも分解・解凍状態でのサイズほしいとかも含むのかな?と
申し訳ないです、フォルダの間違いですね…

とりあえずフォルダのサイズがすぐにわかるようなものは無いようですね。
がんばればできるようですが…私の知識では難しそうかもです…

トピックの解決の基準がよく分からないのですが、大体いいんですかね…?
とりあえず様子見して、意見がでなさそうなら、解決!しますね。

Re: フォルダのサイズは・・・

Posted: 2012年5月02日(水) 22:51
by Dixq (管理人)
softyaさんがズバリ正解な回答をされているのにそれを利用されないのは何故なのでしょう・・?
私もフォルダ内にあるファイル名を取得後、それらのファイルサイズを1つずつ取得して、合計すれば良いだけではないかと思います。
難しいこと考えたくなければリンク先のGetDirSize関数をコピペして使えば良いのでは?

Re: フォルダのサイズは・・・

Posted: 2012年5月03日(木) 09:17
by だんごさん
そうですね・・・ソフト屋さんが解答してくださったリンク先などを参考に
一度試してみます。
皆さま有難うございました。