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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
だんごさん
記事: 273
登録日時: 13年前

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

#1

投稿記事 by だんごさん » 13年前

度々お世話になります。

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

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

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

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

アバター
ぱにしん
記事: 58
登録日時: 14年前
住所: 滋賀

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

#2

投稿記事 by ぱにしん » 13年前

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

とりあえずコードを

コード:

#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を使ってさらに分かりやすくなっているので、元のソースを読まれることをお勧めします。
龍神録プログラミングの館(一番下)

追追記
知られたいのはフォルダのサイズでしたね、失礼しました・・・
最後に編集したユーザー ぱにしん on 2012年4月30日(月) 13:33 [ 編集 3 回目 ]

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#3

投稿記事 by softya(ソフト屋) » 13年前

ディレクトリを探索して、ファイルサイズを得る方法もあります。
「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
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

だんごさん
記事: 273
登録日時: 13年前

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

#4

投稿記事 by だんごさん » 13年前

ぱにしん さんが書きました:

コード:

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

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

アバター
ぱにしん
記事: 58
登録日時: 14年前
住所: 滋賀

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

#5

投稿記事 by ぱにしん » 13年前

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

Ryo

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

#6

投稿記事 by Ryo » 13年前

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#7

投稿記事 by softya(ソフト屋) » 13年前

ぱにしん さんが書きました:「ディレクトリ サイズ C++」で検索したらトップに出てきましたが・・・
読んでない(正確には読むスキルが無い)のでだんごさんが求めていらっしゃるのがこれかどうか判断しかねます・・・
http://d.hatena.ne.jp/yu-hr/20100319/1269021687
オフトピック
個人のサイトを「ここ参考になるんじゃない?」って貼り付けるだけというのはどうなんだろう・・・
それは私の提示したFindFirstFile 関数を使ったものですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

だんごさん
記事: 273
登録日時: 13年前

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

#8

投稿記事 by だんごさん » 13年前

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

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

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

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

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

#9

投稿記事 by Dixq (管理人) » 13年前

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

だんごさん
記事: 273
登録日時: 13年前

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

#10

投稿記事 by だんごさん » 13年前

そうですね・・・ソフト屋さんが解答してくださったリンク先などを参考に
一度試してみます。
皆さま有難うございました。
 Dango San

閉鎖

“C言語何でも質問掲示板” へ戻る