C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.98600 の関連記事表示

<< 0 >>
■98600  テキストファイルだけ数えたい
□投稿者/ ばんじ -(2021/12/06(Mon) 23:36:53)

    分類:[C/C++] 

    フォルダ内のサブディレクトも含めたテキストファイルだけの数を数えたいです。
    下記のコードだとテキストファイル以外も含めたフォルダ内のすべてのファイルの数を数えてしまいます。
    _T("\\*.txt")にするとテキストファイルを数えますが、サブディレクトリ内のテキストファイルまで数えてくれません。
    どうすればいいでしょうか?よろしくお願いします。

    std::size_t file_count_native(const std::basic_string<TCHAR>& src) {
    std::basic_string<TCHAR> root = src + _T("\\*.*");
    WIN32_FIND_DATA wfd = {};
    HANDLE handle = FindFirstFile(root.c_str(), &wfd);
    if (handle == INVALID_HANDLE_VALUE) return 0;

    std::size_t result = 0;
    do {
    std::basic_string<TCHAR> path(wfd.cFileName);
    if (path != _T(".") && path != _T("..")) {
    ++result;
    if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) result += file_count_native(src + _T('\\') + path);
    }
    } while (FindNextFile(handle, &wfd));
    FindClose(handle);

    std::cout << result << std::endl;

    return result;
    }
親記事 /過去ログ171より / 関連記事表示
削除チェック/

■98601  Re[1]: テキストファイルだけ数えたい
□投稿者/ くま -(2021/12/06(Mon) 23:46:43)
    2021/12/06(Mon) 23:47:43 編集(投稿者)

    【C#】フォルダを再帰的に探索して指定拡張子のファイルパスリストを作るメソッド
    https://shirakamisauto.hatenablog.com/entry/2016/03/23/101116

    こちらだと「パス一覧」ですかその部分をファイル数に置き換えるか
    素直にサンプルのコードを実行後リストの件数を取得すればできますよ。

    追記
    失礼しました。C++ですね。

記事No.98600 のレス /過去ログ171より / 関連記事表示
削除チェック/

■98602  Re[2]: テキストファイルだけ数えたい
□投稿者/ くま -(2021/12/06(Mon) 23:56:24)

    【C++】指定パス以下のファイルを全て取得する
    https://qiita.com/huma17ax/items/4e6ac4eea939f0a524a7

    こちらのサンプルだとfile_namesに「全て」なので追加条件を追加するだけです。

    「C++ フォルダ検索 再帰」で検索すると多数ヒットしますので
    ばんじさんが理解しやすいコードを参考にしてみてください。
    (基本構造はほとんど一緒です。)
記事No.98600 のレス /過去ログ171より / 関連記事表示
削除チェック/

■98603  Re[1]: テキストファイルだけ数えたい
□投稿者/ とっちゃん -(2021/12/07(Tue) 00:52:31)
    No98600 (ばんじ さん) に返信
    > フォルダ内のサブディレクトも含めたテキストファイルだけの数を数えたいです。
    > 下記のコードだとテキストファイル以外も含めたフォルダ内のすべてのファイルの数を数えてしまいます。
    > _T("\\*.txt")にするとテキストファイルを数えますが、サブディレクトリ内のテキストファイルまで数えてくれません。
    > どうすればいいでしょうか?よろしくお願いします。
    > 
    
    ファイル数をカウントするところで、問答無用のでカウントアップしていますが、
    以下のようにファイルのみかつ特定の拡張子のみを対象としてカウントしないとだめなのでは?
    
    具体的には以下のような感じでカウントする必要があると思います。
    
    if( (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTDORY) ){
      if( path != _T(".") && path != _T("..") ){
        result += file_count_native( src + _T('\\') + path );
      }
    }
    else{
      // ここでファイルの種類を見てテキストファイルとするものを数える(とりあえず拡張子が.txtを対象)
      if( lstrcmpi( PathFindExtension( wfd.cFileName, ".txt" ) == 0 ){
        ++result;
      }
    }
    
    
記事No.98600 のレス /過去ログ171より / 関連記事表示
削除チェック/

■98607  Re[2]: テキストファイルだけ数えたい
□投稿者/ ばんじ -(2021/12/07(Tue) 10:25:16)
    No98603 (とっちゃん さん) に返信
    > ファイル数をカウントするところで、問答無用のでカウントアップしていますが、
    > 以下のようにファイルのみかつ特定の拡張子のみを対象としてカウントしないとだめなのでは?
    >
    > 具体的には以下のような感じでカウントする必要があると思います。
    >


    出来ました。ありがとうございます。
記事No.98600 のレス / END /過去ログ171より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -