Вот реализация с использованием API Win32.
SubdirCount принимает аргумент строки пути к каталогу и возвращает подсчет его непосредственных дочерних подкаталогов (как int). Скрытые подкаталоги включены, но любой из них называется. или ".." не учитываются.
FindFirstFile - это псевдоним TCHAR, который заканчивается как FindFirstFileA или FindFirstFileW. Чтобы сохранить строки TCHAR, не предполагая наличия CString, здесь приведен пример неудобного кода для добавления «/ *» к аргументу функции.
#include <tchar.h>
#include <windows.h>
int SubdirCount(const TCHAR* parent_path) {
// The hideous string manipulation code below
// prepares a TCHAR wildcard string (sub_wild)
// matching any subdirectory immediately under
// parent_path by appending "\*"
size_t len = _tcslen(parent_path);
const size_t alloc_len = len + 3;
TCHAR* sub_wild = new TCHAR[alloc_len];
_tcscpy_s(sub_wild, alloc_len, parent_path);
if(len && sub_wild[len-1] != _T('\\')) { sub_wild[len++] = _T('\\'); }
sub_wild[len++] = _T('*');
sub_wild[len++] = _T('\0');
// File enumeration starts here
WIN32_FIND_DATA fd;
HANDLE hfind;
int count = 0;
if(INVALID_HANDLE_VALUE != (hfind = FindFirstFile(sub_wild, &fd))) {
do {
if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
// is_alias_dir is true if directory name is "." or ".."
const bool is_alias_dir = fd.cFileName[0] == _T('.') &&
(!fd.cFileName[1] || (fd.cFileName[1] == _T('.') &&
!fd.cFileName[2]));
count += !is_alias_dir;
}
} while(FindNextFile(hfind, &fd));
FindClose(hfind);
}
delete [] sub_wild;
return count;
}
Какой код у вас есть до получения каталога? Что вы на Java и что вы пробовали на C++? – Joe
Вы должны искать такие функции, как 'opendir' и' readdir'. Если вы хотите найти информацию о записи в каталоге (например, является ли это подкаталогом), вам нужно будет использовать 'fstat'. – unxnut
'FindFirstFile' и' FindNextFile' или (желательно) [Boost Fileystem] (http://www.boost.org/doc/libs/release/libs/filesystem/doc/index.htm), который имеет итератор каталогов, которые вы можете использовать со стандартными алгоритмами. –