ファイルパスの一覧を取得しメモリ確保

[戻る]
さおり 2004/10/11(月) 09:32:05
初心者ですが、ご教授お願いいたします。
環境はWinXP、VC.net、SDKです。

指定されたフォルダからサブフォルダも含めて、画像関係のファイルを
検索しそのパスをメモリ上でリストアップしたいのですが、メモリの確保を
どうしようかと思っています。

CStringArrayを使おうかと思いましたが、SDKで使おうとしたら
fatal error C1189 WINDOWS.H already included.  MFC apps must not #include 
<windows.h>
のエラーがでてきました。
このエラーは、MFCじゃないと使えないということでしょうか?それとも使い方がわるい
だけでしょうか?

それと上のように検索してリストアップする場合、SDKでは一般的にどのような
方法をつかうのでしょうか?
ひとつのファイルパスを取得する毎にmallocとかでメモリ確保するのでしょうか?

初歩的だとは思うのですが、おしえてください。

Eighty 2004/10/11(月) 11:26:26
> このエラーは、MFCじゃないと使えないということでしょうか?それとも使い方がわるい
> だけでしょうか?

CStringArrayはMFCなので、MFCを有効にしないと使えません。

> それと上のように検索してリストアップする場合、SDKでは一般的にどのような
> 方法をつかうのでしょうか?

ファイルの検索なら、FindFirstFile、FindNextFile、FindCloseを
使用します。

> ひとつのファイルパスを取得する毎にmallocとかでメモリ確保するのでしょうか?

ファイルパスを取得する毎にメモリ確保しても良いですし、
ある程度メモリ確保しておいて、メモリが足りなくなったら
再確保する処理でも良いです。
mallocでも良いですが、SDKにGlobalAllocがあります。

dairygoods 2004/10/11(月) 11:38:29
std::vectorやstd::stringを使ってみるのも良いかも。

さおり 2004/10/11(月) 17:39:16
さおりです。

レスありがとうございました。
参考にして、いろいろ試してみようかと思います。

ついでなんですが、GlobalAlloc関係と、HeapAlloc関係の
メモリ管理関数は、なにか使い分けをした方がよいのでしょうか?
新規のプログラムはHeapAlloc系を使ったほうがいいような
ことが、MSDNには書いてありましたが・・・。
HeapAllocを使おうとしたら、pHeap→charへのキャストができないとか
いわれてしまいました。
何が悪いのかよくわかりませんが、GlobalAllocも同じなんですかね・・・。
とりあえず、いろいろやって覚えないと、先に進みません・・・。

Bosscat 2004/10/12(火) 12:30:31
ファイル長:
固定長で扱いたければ_MAX_PATH (260)を使えば良い。

HeapAlloc:
戻り値はLPVIODじゃない?
mallocと同じ様に扱えるはず。
GetProcessHeap()使ってる?

古いスレッドには追加発言できません。