GetFileNameでの2バイト文字のファイル名の取得について – プログラミング – Home

GetFileNameでの2バイト文字...
 
通知
すべてクリア

[解決済] GetFileNameでの2バイト文字のファイル名の取得について


なつき
 なつき
(@なつき)
ゲスト
結合: 23年前
投稿: 14
Topic starter  

はじめて質問させていただきます。
なつきといいます。

現在、指定フォルダ配下のフォルダを全て検索して
ツリービューに表示するというプログラムを作成しています。
開発環境は、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
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>取得することができたのですが、FetFileNameで2バイト文字の
>ファイルを取得することはできないのでしょうか?
>あるいは、コーディングで誤りがあるのでしょうか?

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

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

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

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


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

実験してみた、

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
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

あ、半角かなはだめなのか、どうでもいいですね、すみません。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

MSDNには、
「まだ検索していないファイルが残っている場合は 0 以外を返します。」
と書いてあります。

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

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


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

なるほど、日本語の勉強になりました。


返信引用
なつき
 なつき
(@なつき)
ゲスト
結合: 23年前
投稿: 14
Topic starter  

なつきです。
早速のリプライ、ありがとうございました。

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

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

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


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました