W C++17 doszedł moduł filesystem. Więc jeżeli używasz kompilatora zgodnego z najnowszym standardem możesz zrobić tak:
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
std::size_t number_of_files_in_directory(fs::path path)
{
return (std::size_t) std::distance(fs::directory_iterator{ path }, fs::directory_iterator{});
}
int main()
{
std::cout << number_of_files_in_directory(fs::path("C:\\Users\\Przemek\\Desktop")) << "\n";
}
W przypadku VS2017:
#include <iostream>
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
std::size_t number_of_files_in_directory(fs::path path)
{
return (std::size_t) std::distance(fs::directory_iterator{ path }, fs::directory_iterator{});
}
int main()
{
std::cout << number_of_files_in_directory(fs::path("C:\\Users\\Przemek\\Desktop")) << "\n";
}
Inne ścieżki to pobranie osobnego filesystem, albo całego boost'a. Zostaje Ci też korzystanie z WINAPI, lub alternatywy dla środowisk UNIX.