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

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

C# と VB.NET の入門サイト

Re[2]: テキストファイルだけ数えたい


(過去ログ 171 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■98600 / inTopicNo.1)  テキストファイルだけ数えたい
  
□投稿者/ ばんじ (10回)-(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;
}
引用返信 編集キー/
■98601 / inTopicNo.2)  Re[1]: テキストファイルだけ数えたい
□投稿者/ くま (45回)-(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++ですね。


引用返信 編集キー/
■98602 / inTopicNo.3)  Re[2]: テキストファイルだけ数えたい
□投稿者/ くま (46回)-(2021/12/06(Mon) 23:56:24)

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

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

「C++ フォルダ検索 再帰」で検索すると多数ヒットしますので
ばんじさんが理解しやすいコードを参考にしてみてください。
(基本構造はほとんど一緒です。)

引用返信 編集キー/
■98603 / inTopicNo.4)  Re[1]: テキストファイルだけ数えたい
□投稿者/ とっちゃん (751回)-(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;
  }
}


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


出来ました。ありがとうございます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -