Читать все файлы в папке, включая файлы в подпапках, используя C ++ - PullRequest
0 голосов
/ 27 мая 2010

Я хочу прочитать все файлы в данной папке (путь к папке), используя метод FindFirstFile, предоставленный в Windows API. В настоящее время мне удалось только прочитать файлы в данной папке. Я не мог читать файлы в подпапках. Может ли кто-нибудь помочь мне сделать это?

Ответы [ 4 ]

3 голосов
/ 27 мая 2010

Когда вы вызываете FindFirstFile / FindNextFile, некоторые из «файлов», которые он возвращает, фактически являются каталогами. Вы можете проверить, является ли каталог каталогом или нет, посмотрев на поле dwFileAttributes структуры WIN32_FIND_DATA, которая возвращается вам.

Если вы нашли каталог, который вы можете использовать, то вы можете просто рекурсивно вызвать функцию поиска файлов, чтобы перейти в подпапки.

Примечание. Обязательно поместите в специальный регистр псевдо-каталогов . и .., иначе ваша функция вернется в себя и вы получите переполнение стека

Вот документация, если вы ее еще не нашли:

FindFirstFile

WIN32_FIND_DATA

возможные значения для dwFileAttributes (помните, что все это битовые флаги, поэтому вам придется использовать & для проверки)

2 голосов
/ 27 мая 2010

Кроме того, вы можете использовать boost :: filesystem , который не только даст вам чистый API, но и сделает ваш код переносимым на все поддерживаемые платформы.

0 голосов
/ 27 мая 2010

Я использовал этот код для чтения файлов в указанном каталоге.

CFileFind finder;

BOOL bWorking = finder.FindFile( directory );

while( bWorking )
{
    bWorking = finder.FindNextFile();                   
}//end while
0 голосов
/ 27 мая 2010

Посмотрите на этот пример из MSDN, используя CFileFind.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...