#include <string>
#include <vector>
#include <iostream>
#include <windows.h>
#include <conio.h>
int SearchDirectory(std::vector<std::string> &refvecFiles,
const std::string &refcstrRootDirectory,
const std::string &refcstrExtension)
{
std::string strFilePath; // Filepath
std::string strPattern; // Pattern
std::string strExtension; // Extension
HANDLE hFile; // Handle to file
WIN32_FIND_DATA FileInformation; // File information
strPattern = refcstrRootDirectory + "\\*.*";
hFile = ::FindFirstFile(strPattern.c_str(), &FileInformation);
if(hFile != INVALID_HANDLE_VALUE)
{
do
{
if(FileInformation.cFileName[0] != '.')
{
strFilePath.erase();
strFilePath = refcstrRootDirectory + "\\" + FileInformation.cFileName;
if(FileInformation.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
int iRC = SearchDirectory(refvecFiles,strFilePath, refcstrExtension);
if(iRC)
return iRC;
}
else
{
// Check extension
strExtension = FileInformation.cFileName;
strExtension = strExtension.substr(strExtension.rfind(".") + 1);
if(strExtension == refcstrExtension)
{
// Save filename
refvecFiles.push_back(strFilePath);
}
}
}
} while(::FindNextFile(hFile, &FileInformation) == TRUE);
// Close handle
::FindClose(hFile);
DWORD dwError = ::GetLastError();
if(dwError != ERROR_NO_MORE_FILES)
return dwError;
}
return 0;
}
int main()
{
int iRC = 0;
std::vector<std::string> vecPngFiles;
// Search certain directory for '.PNG' imagesfiles including subdirectories
iRC = SearchDirectory(vecPngFiles, "C:\\Users\\test\\Desktop", "png");
if(iRC)
{
std::cout << "Error " << iRC << std::endl;
return -1;
}
// Print results of the .png
for(std::vector<std::string>::iterator iterPng = vecPngFiles.begin();
iterPng != vecPngFiles.end();
++iterPng)
std::cout << *iterPng << std::endl;
// Wait for keystroke for exiting the program
getch();
return 0;
}