前回フォルダの中のフォルダの中のファイル検索について質問させていただきましたが再帰を使えというアドバイスをいただきVC++6.0のMFCダイアログベースにて
【InitDialog内】
if(int p=0; p<=argc;p++){
test(__argv[p]);
}
void ●Dlg::test(CString strFolder)
{
CFileFind find;
CString Newstr=strFolder+_T("\\*.*");
if(find.FindFile(Newstr))
{
int i=1;
while(i)
{
if(strFolder==""){
return 0;
}
i=find.FindNextFile();
if(find.IsDots()){
continue;
}
if(find.IsDirectory()){
test(find.GetFilePath());
}
CString filename=strFolder+"\\"+find.GetFileName();
m_Ary.Add(filename);
find.close();
}
}
}
※m_Aryは●Dlgクラスのメンバ変数
CStringArray m_Ary;
これを実行すると
Debug Assertion Failedが出てきて
デバッグを押すと
BOOL CFileFind::FildNextFile()
{
→ASSERT(m_hContext !=NULL)
→の所でひっかかってるようです。
どうすれば直りますか?
No.1ベストアンサー
- 回答日時:
Find.Close()の位置が悪いからですよ
if(find.FindFile(Newstr))
{
int i=1;
while(i)
{
if(strFolder==""){
return 0;
}
i=find.FindNextFile();
if(find.IsDots()){
continue;
}
if(find.IsDirectory()){
test(find.GetFilePath());
}
CString filename=strFolder+"\\"+find.GetFileName();
m_Ary.Add(filename);
//ココまで来たらfindがクローズされてしまう
find.close();
}
}
以下のようにしてみましょう
if ( find.FindFile( Newstr ) ) {
while( find.FindNextFile() ) {
if ( find.IsDots() )
// . .. などは除外
continue;
}
if ( find.IsDirectory() ) {
// サブフォルダーを再帰呼び出し
Test( Find.GetFilePath() );
}
CString filename = strFolder + "\\" + find.GetFileName();
m_Ary.Add(filename);
// whileへ戻ってフォルダー内を検索
}
// 処理するファイルが無くなったのでココでクローズする
find.Close();
}
といった具合です
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) エクセルの数式で教えてください。 3 2023/06/06 10:13
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- MySQL php テーブルを作れない 2 2022/11/17 18:22
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
intとlongは同じ?
-
C言語で%を使わない余りの出し方
-
2の補数を計算するプログラム
-
再起呼び出しの回数をカウント...
-
画像の拡大・縮小
-
迷路を脱出する経路探索プログ...
-
分数の足し算をさせるプログラ...
-
OpenCVによる4値化について
-
3のつく数と3の倍数を表示 C言語
-
C言語で簡単なパックマンゲーム...
-
ヌメロンのプログラム
-
C++で表を作成したいのです ...
-
複数の共有メモリの作成
-
カードシャッフルのブログラム...
-
whileとifを使い偶数を出すには
-
関数とビット列
-
【C#】SQL文の中に変数を埋め込...
-
異なるn個の整数からr個の整数...
-
c言語プログラミングについて f...
-
条件が多い場合
おすすめ情報