度々お世話になります。
ふと感じたことがあります。DxLib関数にはファイルのサイズを読み取る、
FileRead_sizeという関数があります。
では・・・
もしもアプリと同じフォルダに画像ファイルがあったとします。
dataファイルを開くと画像やら音楽やらのデータがあるということです。
その画像やらのサイズ(縦幅とかではなく)を知るためにはどうしますか?
先ほど書いた、FileRead_size関数で画像一つ一つのサイズを得ますか?
えーと、つまりそのファイルの中にある画像やらのサイズをまとめて知ることができる、
そのフォルダごとサイズを得る、良い方法はありませんか?
説明下手ですみません;;
フォルダのサイズは・・・
Re: フォルダのサイズは・・・
ファイルの名前と数が事前に分かっている、という前提で答えさせていただきますが、構造体を作ってループさせる方法が楽なんじゃないかなと思います。
私には他に思いつかないんですが、もっと良い方法があるかもしれません。
とりあえずコードを
尚、このプログラムはDixqさんがオープンソースで開発なさっている「四聖龍神録Plus・次回作」のソースの一部(画像ファイルの読み込みの部分)を改変したものです。
追記
元のプログラムではenumを使ってさらに分かりやすくなっているので、元のソースを読まれることをお勧めします。
龍神録プログラミングの館(一番下)
追追記
知られたいのはフォルダのサイズでしたね、失礼しました・・・
私には他に思いつかないんですが、もっと良い方法があるかもしれません。
とりあえずコードを
#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;
}
追記
元のプログラムではenumを使ってさらに分かりやすくなっているので、元のソースを読まれることをお勧めします。
龍神録プログラミングの館(一番下)
追追記
知られたいのはフォルダのサイズでしたね、失礼しました・・・
最後に編集したユーザー ぱにしん on 2012年4月30日(月) 13:33 [ 編集 3 回目 ]
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: フォルダのサイズは・・・
ディレクトリを探索して、ファイルサイズを得る方法もあります。
「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
「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(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: フォルダのサイズは・・・
確かに良い方法ですが、これが何百もあったとすると大変ですね・・・。
とりあえず、まとめて調べてくれる関数は無く、コツコツ自分で書くしかない
ということですかねー・・・
Dango San
Re: フォルダのサイズは・・・
「ディレクトリ サイズ C++」で検索したらトップに出てきましたが・・・
読んでない(正確には読むスキルが無い)のでだんごさんが求めていらっしゃるのがこれかどうか判断しかねます・・・
http://d.hatena.ne.jp/yu-hr/20100319/1269021687
読んでない(正確には読むスキルが無い)のでだんごさんが求めていらっしゃるのがこれかどうか判断しかねます・・・
http://d.hatena.ne.jp/yu-hr/20100319/1269021687
オフトピック
個人のサイトを「ここ参考になるんじゃない?」って貼り付けるだけというのはどうなんだろう・・・
Re: フォルダのサイズは・・・
一行目は「ファイルの中にある」とありますが、フォルダの中にあるの間違いでしょうか?だんごさん さんが書きました: えーと、つまりそのファイルの中にある画像やらのサイズをまとめて知ることができる、
そのフォルダごとサイズを得る、良い方法はありませんか?
#アーカイブや圧縮されたものも分解・解凍状態でのサイズほしいとかも含むのかな?と
フォルダのサイズを測るのは、
サブフォルダも含めたファイル全検索の際にサイズを足していく方法しかないと思います。
エクスプローラでかなり多数のファイルが入ってるフォルダのプロパティを開くと
積算されていくのが見れますから、一瞬で答えがかえってくるようなものは用意されてないようです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: フォルダのサイズは・・・
それは私の提示したFindFirstFile 関数を使ったものですね。ぱにしん さんが書きました:「ディレクトリ サイズ C++」で検索したらトップに出てきましたが・・・
読んでない(正確には読むスキルが無い)のでだんごさんが求めていらっしゃるのがこれかどうか判断しかねます・・・
http://d.hatena.ne.jp/yu-hr/20100319/1269021687
オフトピック個人のサイトを「ここ参考になるんじゃない?」って貼り付けるだけというのはどうなんだろう・・・
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: フォルダのサイズは・・・
申し訳ないです、フォルダの間違いですね…Ryo さんが書きました:一行目は「ファイルの中にある」とありますが、フォルダの中にあるの間違いでしょうか?だんごさん さんが書きました: えーと、つまりそのファイルの中にある画像やらのサイズをまとめて知ることができる、
そのフォルダごとサイズを得る、良い方法はありませんか?
#アーカイブや圧縮されたものも分解・解凍状態でのサイズほしいとかも含むのかな?と
とりあえずフォルダのサイズがすぐにわかるようなものは無いようですね。
がんばればできるようですが…私の知識では難しそうかもです…
トピックの解決の基準がよく分からないのですが、大体いいんですかね…?
とりあえず様子見して、意見がでなさそうなら、解決!しますね。
Dango San
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 15年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: フォルダのサイズは・・・
softyaさんがズバリ正解な回答をされているのにそれを利用されないのは何故なのでしょう・・?
私もフォルダ内にあるファイル名を取得後、それらのファイルサイズを1つずつ取得して、合計すれば良いだけではないかと思います。
難しいこと考えたくなければリンク先のGetDirSize関数をコピペして使えば良いのでは?
私もフォルダ内にあるファイル名を取得後、それらのファイルサイズを1つずつ取得して、合計すれば良いだけではないかと思います。
難しいこと考えたくなければリンク先のGetDirSize関数をコピペして使えば良いのでは?