2 #include "opencv2/contrib/contrib.hpp"
5 #if defined(WIN32) || defined(_WIN32)
14 std::vector<std::string> Directory::GetListFiles( const std::string& path, const std::string & exten, bool addPath )
16 std::vector<std::string> list;
18 std::string path_f = path + "/" + exten;
21 WIN32_FIND_DATAW FindFileData;
23 WIN32_FIND_DATAA FindFileData;
28 size_t size = mbstowcs(NULL, path_f.c_str(), path_f.size());
29 Ptr<wchar_t> wpath = new wchar_t[size+1];
31 mbstowcs(wpath, path_f.c_str(), path_f.size());
32 hFind = FindFirstFileExW(wpath, FindExInfoStandard, &FindFileData, FindExSearchNameMatch, NULL, 0);
34 hFind = FindFirstFileA((LPCSTR)path_f.c_str(), &FindFileData);
36 if (hFind == INVALID_HANDLE_VALUE)
44 if (FindFileData.dwFileAttributes == FILE_ATTRIBUTE_NORMAL ||
45 FindFileData.dwFileAttributes == FILE_ATTRIBUTE_ARCHIVE ||
46 FindFileData.dwFileAttributes == FILE_ATTRIBUTE_HIDDEN ||
47 FindFileData.dwFileAttributes == FILE_ATTRIBUTE_SYSTEM ||
48 FindFileData.dwFileAttributes == FILE_ATTRIBUTE_READONLY)
52 size_t asize = wcstombs(NULL, FindFileData.cFileName, 0);
53 fname = new char[asize+1];
55 wcstombs(fname, FindFileData.cFileName, asize);
57 fname = FindFileData.cFileName;
60 list.push_back(path + "/" + std::string(fname));
62 list.push_back(std::string(fname));
66 while(FindNextFileW(hFind, &FindFileData));
68 while(FindNextFileA(hFind, &FindFileData));
76 if((dp = opendir(path.c_str())) == NULL)
81 while ((dirp = readdir(dp)) != NULL)
83 if (dirp->d_type == DT_REG)
85 if (exten.compare("*") == 0)
86 list.push_back(static_cast<std::string>(dirp->d_name));
88 if (std::string(dirp->d_name).find(exten) != std::string::npos)
89 list.push_back(static_cast<std::string>(dirp->d_name));
98 std::vector<std::string> Directory::GetListFolders( const std::string& path, const std::string & exten, bool addPath )
100 std::vector<std::string> list;
101 std::string path_f = path + "/" + exten;
105 WIN32_FIND_DATAW FindFileData;
107 WIN32_FIND_DATAA FindFileData;
112 size_t size = mbstowcs(NULL, path_f.c_str(), path_f.size());
113 Ptr<wchar_t> wpath = new wchar_t[size+1];
115 mbstowcs(wpath, path_f.c_str(), path_f.size());
116 hFind = FindFirstFileExW(wpath, FindExInfoStandard, &FindFileData, FindExSearchNameMatch, NULL, 0);
118 hFind = FindFirstFileA((LPCSTR)path_f.c_str(), &FindFileData);
120 if (hFind == INVALID_HANDLE_VALUE)
129 if (FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY &&
130 wcscmp(FindFileData.cFileName, L".") != 0 &&
131 wcscmp(FindFileData.cFileName, L"..") != 0)
133 if (FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY &&
134 strcmp(FindFileData.cFileName, ".") != 0 &&
135 strcmp(FindFileData.cFileName, "..") != 0)
140 size_t asize = wcstombs(NULL, FindFileData.cFileName, 0);
141 fname = new char[asize+1];
143 wcstombs(fname, FindFileData.cFileName, asize);
145 fname = FindFileData.cFileName;
149 list.push_back(path + "/" + std::string(fname));
151 list.push_back(std::string(fname));
155 while(FindNextFileW(hFind, &FindFileData));
157 while(FindNextFileA(hFind, &FindFileData));
166 if((dp = opendir(path_f.c_str())) == NULL)
171 while ((dirp = readdir(dp)) != NULL)
173 if (dirp->d_type == DT_DIR &&
174 strcmp(dirp->d_name, ".") != 0 &&
175 strcmp(dirp->d_name, "..") != 0 )
177 if (exten.compare("*") == 0)
178 list.push_back(static_cast<std::string>(dirp->d_name));
180 if (std::string(dirp->d_name).find(exten) != std::string::npos)
181 list.push_back(static_cast<std::string>(dirp->d_name));
190 std::vector<std::string> Directory::GetListFilesR ( const std::string& path, const std::string & exten, bool addPath )
192 std::vector<std::string> list = Directory::GetListFiles(path, exten, addPath);
194 std::vector<std::string> dirs = Directory::GetListFolders(path, exten, addPath);
196 std::vector<std::string>::const_iterator it;
197 for (it = dirs.begin(); it != dirs.end(); ++it)
199 std::vector<std::string> cl = Directory::GetListFiles(*it, exten, addPath);
200 list.insert(list.end(), cl.begin(), cl.end());