はじめて質問させていただきます。
なつきといいます。
現在、指定フォルダ配下のフォルダを全て検索して
ツリービューに表示するというプログラムを作成しています。
開発環境は、Win2000 / VC++6.0 + SP2 / MFC です。
そこで、CFileFindクラスを使用し、
以下のようにコーディングしています。
=========================================
CFileFind ff;
CString szName;
if(cff.FindFile(C:\, 0)){
while(cff.FindNextFile()){
//フォルダだったら
if(cff.IsDirectory()){
szName = cff.GetFileName();
}
cff.Close();
}
==========================================
このときに、指定フォルダの配下に2バイト文字のフォルダ
(なつきのような)が存在するとき、GetFileNameで
取得することができません。
SDKのFindFirstFile、FindNextFileを使用すると
取得することができたのですが、FetFileNameで2バイト文字の
ファイルを取得することはできないのでしょうか?
あるいは、コーディングで誤りがあるのでしょうか?
ご存知の方がいらっしゃいましたら、ご教授お願いします。
>取得することができたのですが、FetFileNameで2バイト文字の
>ファイルを取得することはできないのでしょうか?
>あるいは、コーディングで誤りがあるのでしょうか?
どちらでもないよーな気が。。。
なつき と同じ階層レベルに はるき ふゆき というディレクトリ(フォルダ)を
つくって実験してみてください。
最後につくったディレクトリだけがひっかからないよーな雰囲気ですねェ。
うーん、わからんです。(゜.゜?;
実験してみた、
CFileFind cff;
CString szName;
if(cff.FindFile(D:\\*.*, 0)){
while(cff.FindNextFile()){
cout<< (LPCSTR)cff.GetFileName() << endl ;
}
cout<<(LPCSTR)cff.GetFileName()<< (#゜Д゜)<なんでここで取得できんだ?
<<endl ;
cff.Close();
}
(#゜Д゜)<なんでここで取得できんだ? の部分で取得できますた。
ドキュメントのバグですか?
あ、半角かなはだめなのか、どうでもいいですね、すみません。
MSDNには、
「まだ検索していないファイルが残っている場合は 0 以外を返します。」
と書いてあります。
つまり、戻り値0の意味は、
「一番最後のファイルを見つけましたよ」ということです。
なので、次のようにコーディングします。
CFileFind cff;
BOOL bFound = cff.FindFile(C:\\*.*, 0);
while (bFound) {
bFound = cff.FindNextFile();
if (cff.IsDirectory()) {
// 処理
}
}
なるほど、日本語の勉強になりました。
なつきです。
早速のリプライ、ありがとうございました。
ご指摘のとおり、やはり、最後のフォルダが
取得できていませんでした。
(1バイト、2バイトは関係ありせんでした・・・)
while文の条件にFindNextFileの戻り値をいれていたため
最後のフォルダをFindNextFileしたときに
次のフォルダが存在しないため、0が戻り、
while文の条件にHitしないため、関数を抜けていました。
ご指摘ご教授、ありがとうございました。
>つまり、戻り値0の意味は、
>「一番最後のファイルを見つけましたよ」ということです。
なるほどです。
最後はもー1回チェックしないとアカンということですか。
動作確認もできました。
よくできたメンバ関数だこと。>負けをしみ(笑)