1 #include "opencv2/contrib.hpp"
4 #if defined(WIN32) || defined(_WIN32)
13 std::vector<String> Directory::GetListFiles( const String& path, const String & exten, bool addPath )
15 std::vector<String> list;
17 String path_f = path + "/" + exten;
20 WIN32_FIND_DATAW FindFileData;
22 WIN32_FIND_DATAA FindFileData;
27 wchar_t wpath[MAX_PATH];
28 size_t copied = mbstowcs(wpath, path_f.c_str(), MAX_PATH);
29 CV_Assert((copied != MAX_PATH) && (copied != (size_t)-1));
30 hFind = FindFirstFileExW(wpath, FindExInfoStandard, &FindFileData, FindExSearchNameMatch, NULL, 0);
32 hFind = FindFirstFileA((LPCSTR)path_f.c_str(), &FindFileData);
34 if (hFind == INVALID_HANDLE_VALUE)
42 if (FindFileData.dwFileAttributes == FILE_ATTRIBUTE_NORMAL ||
43 FindFileData.dwFileAttributes == FILE_ATTRIBUTE_ARCHIVE ||
44 FindFileData.dwFileAttributes == FILE_ATTRIBUTE_HIDDEN ||
45 FindFileData.dwFileAttributes == FILE_ATTRIBUTE_SYSTEM ||
46 FindFileData.dwFileAttributes == FILE_ATTRIBUTE_READONLY)
50 char fname_tmp[MAX_PATH] = {0};
51 size_t copied = wcstombs(fname_tmp, FindFileData.cFileName, MAX_PATH);
52 CV_Assert((copied != MAX_PATH) && (copied != (size_t)-1));
55 fname = FindFileData.cFileName;
58 list.push_back(path + "/" + String(fname));
60 list.push_back(String(fname));
64 while(FindNextFileW(hFind, &FindFileData));
66 while(FindNextFileA(hFind, &FindFileData));
74 if((dp = opendir(path.c_str())) == NULL)
79 while ((dirp = readdir(dp)) != NULL)
81 if (dirp->d_type == DT_REG)
83 if (exten.compare("*") == 0)
84 list.push_back(static_cast<String>(dirp->d_name));
86 if (String(dirp->d_name).find(exten) != String::npos)
87 list.push_back(static_cast<String>(dirp->d_name));
96 std::vector<String> Directory::GetListFolders( const String& path, const String & exten, bool addPath )
98 std::vector<String> list;
99 String path_f = path + "/" + exten;
103 WIN32_FIND_DATAW FindFileData;
105 WIN32_FIND_DATAA FindFileData;
110 wchar_t wpath [MAX_PATH];
111 size_t copied = mbstowcs(wpath, path_f.c_str(), path_f.size());
112 CV_Assert((copied != MAX_PATH) && (copied != (size_t)-1));
114 hFind = FindFirstFileExW(wpath, FindExInfoStandard, &FindFileData, FindExSearchNameMatch, NULL, 0);
116 hFind = FindFirstFileA((LPCSTR)path_f.c_str(), &FindFileData);
118 if (hFind == INVALID_HANDLE_VALUE)
127 if (FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY &&
128 wcscmp(FindFileData.cFileName, L".") != 0 &&
129 wcscmp(FindFileData.cFileName, L"..") != 0)
131 if (FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY &&
132 strcmp(FindFileData.cFileName, ".") != 0 &&
133 strcmp(FindFileData.cFileName, "..") != 0)
138 char fname_tmp[MAX_PATH];
139 size_t copied = wcstombs(fname_tmp, FindFileData.cFileName, MAX_PATH);
140 CV_Assert((copied != MAX_PATH) && (copied != (size_t)-1));
143 fname = FindFileData.cFileName;
147 list.push_back(path + "/" + String(fname));
149 list.push_back(String(fname));
153 while(FindNextFileW(hFind, &FindFileData));
155 while(FindNextFileA(hFind, &FindFileData));
164 if((dp = opendir(path_f.c_str())) == NULL)
169 while ((dirp = readdir(dp)) != NULL)
171 if (dirp->d_type == DT_DIR &&
172 strcmp(dirp->d_name, ".") != 0 &&
173 strcmp(dirp->d_name, "..") != 0 )
175 if (exten.compare("*") == 0)
176 list.push_back(static_cast<String>(dirp->d_name));
178 if (String(dirp->d_name).find(exten) != String::npos)
179 list.push_back(static_cast<String>(dirp->d_name));
188 std::vector<String> Directory::GetListFilesR ( const String& path, const String & exten, bool addPath )
190 std::vector<String> list = Directory::GetListFiles(path, exten, addPath);
192 std::vector<String> dirs = Directory::GetListFolders(path, exten, addPath);
194 std::vector<String>::const_iterator it;
195 for (it = dirs.begin(); it != dirs.end(); ++it)
197 std::vector<String> cl = Directory::GetListFiles(*it, exten, addPath);
198 list.insert(list.end(), cl.begin(), cl.end());