GetFileNameでの2バイト文字のファイル名の取得について

[戻る]
なつき 2002/06/04(火) 16:04:15
はじめて質問させていただきます。
なつきといいます。

現在、指定フォルダ配下のフォルダを全て検索して
ツリービューに表示するというプログラムを作成しています。
開発環境は、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バイト文字の
ファイルを取得することはできないのでしょうか?
あるいは、コーディングで誤りがあるのでしょうか?

ご存知の方がいらっしゃいましたら、ご教授お願いします。

Bun 2002/06/04(火) 16:47:24
>取得することができたのですが、FetFileNameで2バイト文字の
>ファイルを取得することはできないのでしょうか?
>あるいは、コーディングで誤りがあるのでしょうか?

どちらでもないよーな気が。。。

なつき と同じ階層レベルに はるき ふゆき というディレクトリ(フォルダ)を
つくって実験してみてください。

最後につくったディレクトリだけがひっかからないよーな雰囲気ですねェ。

うーん、わからんです。(゜.゜?;

PAI 2002/06/04(火) 17:21:37
実験してみた、

CFileFind cff;
CString szName;

if(cff.FindFile("D:\\*.*", 0)){

    while(cff.FindNextFile()){
        cout<< (LPCSTR)cff.GetFileName() << endl ;
    }
    cout<<(LPCSTR)cff.GetFileName()<< "(#゜Д゜)<なんでここで取得できんだ?" 
<<endl ;
    cff.Close();
}

"(#゜Д゜)<なんでここで取得できんだ?" の部分で取得できますた。
ドキュメントのバグですか?

PAI 2002/06/04(火) 17:22:29
あ、半角かなはだめなのか、どうでもいいですね、すみません。

dairygoods 2002/06/04(火) 17:36:18
MSDNには、
「まだ検索していないファイルが残っている場合は 0 以外を返します。」
と書いてあります。

つまり、戻り値0の意味は、
「一番最後のファイルを見つけましたよ」ということです。

なので、次のようにコーディングします。
CFileFind cff;
BOOL bFound = cff.FindFile("C:\\*.*", 0);
while (bFound) {
    bFound = cff.FindNextFile();
    if (cff.IsDirectory()) {
        // 処理
    }
}

PAI 2002/06/04(火) 17:43:39
なるほど、日本語の勉強になりました。

なつき 2002/06/04(火) 17:51:43
[[解決]]
なつきです。
早速のリプライ、ありがとうございました。

ご指摘のとおり、やはり、最後のフォルダが
取得できていませんでした。
(1バイト、2バイトは関係ありせんでした・・・)

while文の条件にFindNextFileの戻り値をいれていたため
最後のフォルダをFindNextFileしたときに
次のフォルダが存在しないため、0が戻り、
while文の条件にHitしないため、関数を抜けていました。

ご指摘ご教授、ありがとうございました。

Bun 2002/06/04(火) 17:56:41
>つまり、戻り値0の意味は、
>「一番最後のファイルを見つけましたよ」ということです。

なるほどです。
最後はもー1回チェックしないとアカンということですか。
動作確認もできました。

よくできたメンバ関数だこと。>負けをしみ(笑)

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