|
inlib
1.2.0
|
Classes | |
| class | visitor |
| class | tree |
Functions | |
| bool | pwd (std::string &a_pwd) |
| bool | cd (const std::string &a_path) |
| bool | create (const std::string &a_name) |
| std::string | home () |
| bool | cd_home () |
| bool | in_fs (const std::string &a_path) |
| bool | is_a (const std::string &a_path, bool &a_value) |
| bool | is_dot (const std::string &a_path) |
| bool | mkcd (const std::string &a_name) |
| bool | is_empty (const std::string &a_path, bool &a_is_empty) |
| bool | entries (const std::string &a_path, std::vector< std::string > &a_list, bool a_full_path=true) |
| bool | is_an_entry (const std::string &a_path, const std::string &a_name, bool &a_found) |
| std::string | path_base_name (const std::string &a_path) |
| bool | rmdir (const std::string &a_path) |
| bool inlib::dir::cd | ( | const std::string & | a_path | ) | [inline] |
| bool inlib::dir::cd_home | ( | ) | [inline] |
| bool inlib::dir::create | ( | const std::string & | a_name | ) | [inline] |
| bool inlib::dir::entries | ( | const std::string & | a_path, |
| std::vector< std::string > & | a_list, | ||
| bool | a_full_path = true |
||
| ) | [inline] |
Definition at line 175 of file dir.
{
a_list.clear();
struct stat finfo;
if (::stat(a_path.c_str(),&finfo) < 0) return false;
#ifdef WIN32
if (!(finfo.st_mode & S_IFDIR)) return false;
std::string entry = a_path;
if (!(entry[entry.size()] == '/' || entry[entry.size()] == '\\' ))
entry += "\\";
entry += "*";
WIN32_FIND_DATA findFileData;
HANDLE dir = ::FindFirstFile(entry.c_str(),&findFileData);
if(dir == INVALID_HANDLE_VALUE) return false;
// Get file names :
for (;;) {
if(!::FindNextFile(dir,&findFileData)) break;
std::string name = (const char*)findFileData.cFileName;
// Be sure we can work on the file :
std::string fname = a_path+"\\"+name;
if (::stat(fname.c_str(),&finfo) < 0) continue;
if(a_full_path)
a_list.push_back(fname);
else
a_list.push_back(name);
}
::FindClose(dir);
#else
if (!S_ISDIR(finfo.st_mode)) return false;
DIR* dir = ::opendir(a_path.c_str());
if(!dir) return false;
// Get file names :
for (;;) {
struct dirent* dp = ::readdir(dir);
//struct direct* dp;
if (dp==NULL) break;
#if defined(_POSIX_SOURCE)
if(true) {
#else
if(dp->d_ino!=0) {
#endif
std::string name = dp->d_name;
// Be sure we can work on the file :
std::string fname = a_path+"/"+name;
if (::stat(fname.c_str(),&finfo) < 0) continue;
if(a_full_path)
a_list.push_back(fname);
else
a_list.push_back(name);
}
}
::closedir(dir);
#endif
return true;
}
| std::string inlib::dir::home | ( | ) | [inline] |
| bool inlib::dir::in_fs | ( | const std::string & | a_path | ) | [inline] |
| bool inlib::dir::is_a | ( | const std::string & | a_path, |
| bool & | a_value | ||
| ) | [inline] |
| bool inlib::dir::is_an_entry | ( | const std::string & | a_path, |
| const std::string & | a_name, | ||
| bool & | a_found | ||
| ) | [inline] |
Definition at line 230 of file dir.
{
a_found = false;
struct stat finfo;
if (::stat(a_path.c_str(),&finfo) < 0) return false;
#ifdef WIN32
if (!(finfo.st_mode & S_IFDIR)) return false;
std::string entry = a_path;
if (!(entry[entry.size()] == '/' || entry[entry.size()] == '\\' ))
entry += "\\";
entry += "*";
WIN32_FIND_DATA findFileData;
HANDLE dir = ::FindFirstFile(entry.c_str(),&findFileData);
if(dir == INVALID_HANDLE_VALUE) return false;
// Get file names :
for (;;) {
if(!::FindNextFile(dir,&findFileData)) break;
std::string name = (const char*)findFileData.cFileName;
if(name==a_name) {
a_found = true;
::FindClose(dir);
return true;
}
}
::FindClose(dir);
#else
if (!S_ISDIR(finfo.st_mode)) return false;
DIR* dir = ::opendir(a_path.c_str());
if(!dir) return false;
// Get file names :
for (;;) {
struct dirent* dp = ::readdir(dir);
//struct direct* dp;
if (dp==NULL) break;
#if defined(_POSIX_SOURCE)
if(true) {
#else
if(dp->d_ino!=0) {
#endif
std::string name = dp->d_name;
if(name==a_name) {
a_found = true;
::closedir(dir);
return true;
}
}
}
::closedir(dir);
#endif
return true;
}
| bool inlib::dir::is_dot | ( | const std::string & | a_path | ) | [inline] |
Definition at line 99 of file dir.
{
#ifdef WIN32
char sep = '\\';
#else
char sep = '/';
#endif
unsigned int l = a_path.size();
if((l==1) && (a_path[0]=='.') ) return true;
if((l==2) && (a_path[0]=='.') && (a_path[l]=='.') ) return true;
if((l>=2) && (a_path[l-1]=='.') && (a_path[l-2]==sep) ) return true;
if((l>=3) && (a_path[l-1]=='.') && (a_path[l-2]=='.') && (a_path[l-3]==sep) )
return true;
return false;
}
| bool inlib::dir::is_empty | ( | const std::string & | a_path, |
| bool & | a_is_empty | ||
| ) | [inline] |
Definition at line 126 of file dir.
{
a_is_empty = true;
struct stat finfo;
if (::stat(a_path.c_str(),&finfo) < 0) return false;
#ifdef WIN32
if (!(finfo.st_mode & S_IFDIR)) return false;
std::string entry = a_path;
if (!(entry[entry.size()] == '/' || entry[entry.size()] == '\\' ))
entry += "\\";
entry += "*";
WIN32_FIND_DATA findFileData;
HANDLE dir = ::FindFirstFile(entry.c_str(),&findFileData);
if(dir == INVALID_HANDLE_VALUE) return false;
for (;;) {
if(!::FindNextFile(dir,&findFileData)) break;
std::string name = (const char*)findFileData.cFileName;
if(name==".") continue;
if(name=="..") continue;
a_is_empty = false;
::FindClose(dir);
return true;
}
::FindClose(dir);
#else
if (!S_ISDIR(finfo.st_mode)) return false;
DIR* dir = ::opendir(a_path.c_str());
if(!dir) return false;
for (;;) {
struct dirent* dp = ::readdir(dir);
//struct direct* dp;
if (dp==NULL) break;
#if defined(_POSIX_SOURCE)
if(true) {
#else
if(dp->d_ino!=0) {
#endif
std::string name = dp->d_name;
if(name==".") continue;
if(name=="..") continue;
a_is_empty = false;
::closedir(dir);
return true;
}
}
::closedir(dir);
#endif
return true;
}
| bool inlib::dir::mkcd | ( | const std::string & | a_name | ) | [inline] |
Definition at line 114 of file dir.
{
// a_name should be a single directory name, and not a file system path.
// Then it must not contain : ., .., /, \ etc...
bool is;
if(!is_a(a_name,is)) { //a_name does not exist as a file or dir.
if(!create(a_name)) return false;
} else {
if(!is) return false; //a_name exists but is not a directory.
}
return cd(a_name);
}
| std::string inlib::dir::path_base_name | ( | const std::string & | a_path | ) | [inline] |
Definition at line 283 of file dir.
{
std::string::size_type pos_slash = a_path.rfind('/');
std::string::size_type pos_bslash = a_path.rfind('\\');
std::string::size_type pos = 0;
if(pos_slash==std::string::npos) {
if(pos_bslash==std::string::npos) {
pos = std::string::npos;
} else {
pos = pos_bslash;
}
} else {
if(pos_bslash==std::string::npos) {
pos = pos_slash;
} else {
if(pos_slash<=pos_bslash) {
pos = pos_bslash;
} else {
pos = pos_slash;
}
}
}
if(pos==std::string::npos) return a_path;
pos++;
return a_path.substr(pos,a_path.size()-pos);
}
| bool inlib::dir::pwd | ( | std::string & | a_pwd | ) | [inline] |
Definition at line 25 of file dir.
{
// Return current directory.
unsigned int mx_path_len = 1024;
char* cwd = new char[mx_path_len];
#ifdef WIN32
// driveletter = 0 means return the working directory for the default drive.
if(::_getdcwd(0,cwd,mx_path_len)==NULL) {
delete [] cwd;
a_pwd.clear();
return false;
}
#else
if(::getcwd(cwd,mx_path_len)==NULL) {
delete [] cwd;
a_pwd.clear();
return false;
}
#endif
a_pwd = cwd;
delete [] cwd;
return true;
}
| bool inlib::dir::rmdir | ( | const std::string & | a_path | ) | [inline] |
Definition at line 310 of file dir.
{
struct stat finfo;
if(::stat(a_path.c_str(),&finfo) < 0) return true;
#ifdef WIN32
if(!(finfo.st_mode & S_IFDIR)) return false;
#else
if(!S_ISDIR(finfo.st_mode)) return false;
#endif
// Empty the directory :
std::vector<std::string> files;
entries(a_path,files);
unsigned int filen = files.size();
for(unsigned int count=0;count<filen;count++) {
const std::string& entry = files[count];
{std::string name = path_base_name(entry);
if((name==".")||(name=="..")) continue;}
bool is_dir;
if(!is_a(entry,is_dir)) return false;
if(is_dir) {
if(!dir::rmdir(entry)) {
//::printf("debug : rm dir %s failed.\n",entry.c_str());
return false;
}
//::printf("debug : rm dir %s.\n",entry.c_str());
} else {
if(::remove(entry.c_str())!=0) {
//::printf("debug : rm file %s failed.\n",entry.c_str());
return false;
}
//::printf("debug : rm file %s.\n",entry.c_str());
}
}
// Remove the directory :
return (::rmdir(a_path.c_str())==0?true:false);
}
1.7.5.1