Esempio n. 1
0
DirectoryEntries Windows::listDirectory (const std::string& basedir, const std::string& subdir)
{
	DirectoryEntries entities;
	std::string search(basedir + "\\");
	int findhandle;
	struct _finddata_t findinfo;

	if (!subdir.empty()) {
		search.append(subdir).append("\\");
	} else {
		search.append("*");
	}

	findhandle = _findfirst(search.c_str(), &findinfo);
	if (findhandle == -1)
		return entities;

	do {
		if (findinfo.attrib & _A_SUBDIR) {
			if (strcmp(findinfo.name, ".") && strcmp(findinfo.name, "..")) {
				std::string newsubdirs;
				if (!subdir.empty())
					newsubdirs.append(subdir).append("\\");
				newsubdirs.append(findinfo.name);
				DirectoryEntries subDirEnts = listDirectory(basedir, newsubdirs);
				entities.insert(entities.end(), subDirEnts.begin(), subDirEnts.end());
			}
		} else {
			std::string filename(subdir);
			if (!filename.empty())
				filename.append("\\");
			filename.append(findinfo.name);
			entities.push_back(filename);
		}
	} while (_findnext(findhandle, &findinfo) != -1);

	_findclose(findhandle);

	return entities;
}