Как получить все файлы в заданном каталоге с помощью C++ в Windows?Файлы в каталоге в C++
Примечание:
Я нашел методы, которые используют dirent.h
, но мне нужно более стандартный способ ...
Благодарности
Как получить все файлы в заданном каталоге с помощью C++ в Windows?Файлы в каталоге в C++
Примечание:
Я нашел методы, которые используют dirent.h
, но мне нужно более стандартный способ ...
Благодарности
Вы должны использовать функцию FindFirstFile
(documented here). Это стандартный (и предпочтительный) способ в Windows, однако он не переносится. Выбранный заголовок dirent.h
содержит определение функций standard POSIX.
Для полного кода посмотреть на этом примере: Listing the Files in a Directory
Использование FindFirstFile и связанные с ними функции. Пример:
HANDLE hFind;
WIN32_FIND_DATA data;
hFind = FindFirstFile("c:\\*.*", &data);
if (hFind != INVALID_HANDLE_VALUE) {
do {
printf("%s\n", data.cFileName);
} while (FindNextFile(hFind, &data));
FindClose(hFind);
}
-1 для использования устаревшего 8-битного API. – Philipp
@Philipp: это устаревший * 8-битный * API ??? – Wizard79
@ Lorenzo: тот, который использовался casablanca, называется «ANSI» в библиотеке MSDN (термин «8-бит» технически корректен, но, по-видимому, используется мной исключительно). Он включен только для совместимости с Windows 9x. Собственный API - UTF-16. Чтобы использовать его, всюду определяйте 'UNICODE' и заменяйте 8-битные функции, такие как' printf', либо с помощью общих макросов ('_tprintf'), либо с помощью функции UTF-16 (' _wprintf'), и используйте «широкие» строковые константы с ' L' или макросом 'TEXT'. Посмотрите свое собственное сообщение для лучшего примера (все еще без 'UNICODE', потому что это должно быть определено с помощью переключателя компилятора). – Philipp
Что касается библиотеки boost: файловой системы. Boost.org
+1 для Boost. Возможно, вы захотите установить ссылку на документы файловой системы: http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/index.htm –
Это вряд ли «стандартный способ» в Windows ... – Wizard79
Это зависит от определения слова «стандарт». Если вы принимаете только стандарты ISO, то стандартного способа вообще нет. 'FindFirstFile' является принятым интерфейсом ОС для перечисления записей в каталоге, а Boost.Filesystem - это всего лишь оболочка этого интерфейса в Windows. Оба являются стандартами де-факто. – Philipp
Принятый стандарт C++ описан в
N1975
ISO/IEC TS 18822: 2015, последний проект является N4100. Возможно, у вашего компилятора его еще нет, и в этом случае Boost.FileSystem обеспечивает практически то же самое.
На самом деле функции в dirent.h являются более стандартными (POSIX). – 2010-07-04 21:12:19
Но файл не включен в VC++ 2008 – qwe
@Neil: POSIX не входит в стандартную библиотеку и не поддерживается самой используемой компилятором C/C++ (MSVC) самой используемой операционной системы (Windows). – Wizard79