1#include <cgv/utils/dir.h>
2#include <cgv/utils/file.h>
21bool exists(
const std::string& dir_name)
24 void* handle = file::find_first(dir_name+
"\\*.*");
25 bool ret = (bool)handle;
27 file::find_close(handle);
31 return ((stat(dir_name.c_str(), &myStat) == 0) && (((myStat.st_mode) & S_IFMT) == S_IFDIR));
35bool chdir(
const std::string& dir_name)
38 return _chdir(dir_name.c_str()) == 0;
40 return ::chdir(dir_name.c_str());
46bool mkdir(
const std::string& dir_name)
49 return _mkdir(dir_name.c_str()) == 0;
51 return ::mkdir(dir_name.c_str(),S_IRWXU|S_IRWXG|S_IRWXO);
56bool rmdir(
const std::string& dir_name)
59 return _rmdir(dir_name.c_str()) == 0;
61 return ::rmdir(dir_name.c_str());
71 char buf[FILENAME_MAX];
72 char * pbuf = _getcwd(buf,FILENAME_MAX);
73 std::string s = (pbuf) ? buf :
"";
75 char* r = getcwd(NULL,0);
78 std::cerr<<
"failed"<<std::endl;
88bool recursive_glob(
const std::string& dir_name,
const std::string& sub_path, std::vector<std::string>& file_names,
const std::string& filter,
bool recursive,
bool short_file_names, std::vector<std::string>* subdir_names)
90 std::string search_path = dir_name + sub_path + filter;
91 void* handle = file::find_first(search_path);
93 std::string file_name = (short_file_names ? sub_path : dir_name + sub_path) + file::find_name(handle);
94 if (file::find_directory(handle)) {
95 if (file::find_name(handle) !=
"." && file::find_name(handle) !=
"..") {
97 subdir_names->push_back(file_name);
99 recursive_glob(dir_name, sub_path + file::find_name(handle) +
"/", file_names, filter,
true, short_file_names, subdir_names);
103 file_names.push_back(file_name);
105 handle = file::find_next(handle);
108 search_path = dir_name + sub_path +
"*";
109 void* handle = file::find_first(search_path);
110 while (handle != 0) {
111 std::string file_name = (short_file_names ? sub_path : dir_name + sub_path) + file::find_name(handle);
112 if (file::find_directory(handle) && file::find_name(handle) !=
"." && file::find_name(handle) !=
"..") {
114 subdir_names->push_back(file_name);
116 recursive_glob(dir_name, sub_path + file::find_name(handle) +
"/", file_names, filter,
true, short_file_names, subdir_names);
118 handle = file::find_next(handle);
125bool glob(
const std::string& dir_name, std::vector<std::string>& file_names,
const std::string& filter,
bool recursive,
bool short_file_names, std::vector<std::string>* subdir_names)
127 if (!exists(dir_name))
129 recursive_glob(dir_name+
"/",
"", file_names, filter, recursive, short_file_names, subdir_names);