Count Files in Directory

How can I count the number of files in a directory?

Counting the number of files in a directory is a common task that can be accomplished by iterating through the directory entries and incrementing a counter for each file.

Here's an example that counts regular files in a directory:

#include <filesystem>
#include <iostream>

namespace fs = std::filesystem;

int main() {
  fs::directory_iterator start{R"(c:\test)"};
  fs::directory_iterator end{};

  int file_count = 0;  // Initialize counter 

  for (auto iter{start}; iter != end; ++iter) {
    if (iter->is_regular_file()) {  
      ++file_count;
    }
  }

  std::cout << "Number of files: " << file_count;
}
Number of files: 3

Steps to Count Files:

  1. Initialize Iterator: Create a std::filesystem::directory_iterator for the target directory.
  2. Initialize Counter: Set a counter variable to zero.
  3. Iterate and Count: Loop through the directory entries, incrementing the counter for each regular file.

Counting Files and Directories Separately:

You can also count files and directories separately:

#include <filesystem>
#include <iostream>

namespace fs = std::filesystem;

int main() {
  fs::directory_iterator start{R"(c:\test)"};
  fs::directory_iterator end{};

  int file_count = 0;
  int dir_count = 0;

  for (auto iter{start}; iter != end; ++iter) {
    if (iter->is_regular_file()) {
      ++file_count;
    } else if (iter->is_directory()) {
      ++dir_count;
    }
  }

  std::cout << "Number of files: "
    << file_count << '\n';
  std::cout << "Number of directories: "
    << dir_count << '\n';
}
Number of files: 3
Number of directories: 1

Using Range-Based Algorithms:

You can also use range-based algorithms to count files:

#include <filesystem>
#include <iostream>
#include <ranges>
namespace fs = std::filesystem;

int main() {
  auto entries = std::ranges::subrange{
    fs::directory_iterator{R"(c:\test)"},
    fs::directory_iterator{}
  };

  auto file_count = std::ranges::count_if(
    entries,
    [](const fs::directory_entry& entry) {
      return entry.is_regular_file();
    }
  );

  std::cout << "Number of files: " << file_count;
}
Number of files: 3

Counting with Recursive Iteration:

If you want to count files in a directory and its subdirectories, use std::filesystem::recursive_directory_iterator:

#include <filesystem>
#include <iostream>

namespace fs = std::filesystem;

int main() {
  fs::recursive_directory_iterator start{
    R"(c:\test)"};
  fs::recursive_directory_iterator end{};

  int file_count = 0;

  for (auto iter{start}; iter != end; ++iter) {
    if (iter->is_regular_file()) {
      ++file_count;
    }
  }

  std::cout << "Number of files: " << file_count;
}
Number of files: 3

Counting files is a fundamental operation that can be easily implemented using the techniques shown above, whether for flat or recursive directory structures.

Directory Iterators

An introduction to iterating through the file system, using directory_iterator and recursive_directory_iterator.

Questions & Answers

Answers are generated by AI models and may not have been reviewed. Be mindful when running any code on your device.

Network Paths with Directory Iterators
Can directory_iterator be used with network paths?
Filter Directory Entries
How do I filter the directory entries to only show files?
Handling Missing Directories with directory_iterator
What happens if the directory path does not exist when creating a directory_iterator?
Skip Files or Directories using directory_iterator
How can I skip certain files or directories during iteration?
Sort Directory Entries
Is it possible to sort the directory entries while iterating?
Handle Symbolic Links During Directory Iteration
How do I handle symbolic links when using directory_iterator?
Get File Attributes During Directory Iteration
Can I use directory_iterator to get file attributes?
Stop Directory Iteration Early
How can I stop the iteration prematurely when using directory_iterator?
Use Directory Iterator with Multithreading
How can I combine directory_iterator with multithreading?
Use Relative Paths with Directory Iterator
Can directory_iterator be used with relative paths?
Iterate Multiple Directories
How do I iterate over multiple directories in one loop?
Or Ask your Own Question
Get an immediate answer to your specific question using our AI assistant