Changeset 2892


Ignore:
Timestamp:
Dec 9, 2012, 8:15:18 AM (9 years ago)
Author:
Peter
Message:

add functions mkdir, mkdir_p, basename, dirname. refs #717

Location:
trunk/yat/utility
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/yat/utility/utility.cc

    r2881 r2892  
    2626#include "utility.h"
    2727
     28#include "FileUtil.h"
    2829#include "stl_utility.h"
    2930
    3031#include <sstream>
    3132#include <string>
     33#include <sys/stat.h>
    3234
    3335namespace theplu {
    3436namespace yat {
    3537namespace utility {
     38
     39  std::string basename(const std::string& path)
     40  {
     41    if (path.size()==1)
     42      return path;
     43    size_t pos = path.find_last_of('/');
     44    if (pos==std::string::npos)
     45      return path;
     46    if (pos==path.size()-1)
     47      return basename(path.substr(0, path.size()-1));
     48    return path.substr(pos+1);
     49  }
     50
     51
     52  std::string dirname(const std::string& path)
     53  {
     54    if (path.size()==1) {
     55      if (path=="/")
     56        return path;
     57      else
     58        return ".";
     59    }
     60    assert(path.size()>=2);
     61    size_t pos = path.find_last_of('/', path.size()-2);
     62    if (pos==std::string::npos)
     63      return ".";
     64    if (pos==0)
     65      return "/";
     66    return path.substr(0,pos);
     67  }
     68
    3669
    3770  bool is_double(const std::string& s)
     
    73106
    74107
     108  void mkdir(const std::string& dir)
     109  {
     110    int code = ::mkdir(dir.c_str(),0777);
     111    if (code){
     112      std::stringstream ss;
     113      ss << "mkdir: '" << dir << "': ";
     114      throw yat::utility::errno_error(ss.str());
     115    }
     116  }
     117
     118
     119  void mkdir_p(const std::string& dir)
     120  {
     121    if (FileUtil(dir).exists())
     122      return;
     123    mkdir_p(dirname(dir));
     124    mkdir(dir);
     125  }
     126
     127
    75128}}} // end of namespace utility, yat and thep
  • trunk/yat/utility/utility.h

    r2867 r2892  
    5656
    5757  /**
     58     \return everything after last '/'
     59   */
     60  std::string basename(const std::string& fn);
     61
     62  /**
    5863     For each element in resulting range assign it to 0.0 if
    5964     corresponding element in input range is NaN else assign it to
     
    8691  template<typename T>
    8792  T convert(const std::string& s);
     93
     94  /**
     95     \return everything prior last '/'.
     96   */
     97  std::string dirname(const std::string& fn);
    8898
    8999  /**
     
    262272} // end of namespace detail
    263273
     274
     275  /**
     276     create a directory \a dir
     277
     278     \throw if creation failed
     279   */
     280  void mkdir(const std::string& dir);
     281
     282  /**
     283     Similar to 'mkdir -p'. Does not throw on error and create parent
     284     directories if missing.
     285   */
     286  void mkdir_p(const std::string& dir);
    264287
    265288  // template implementations
Note: See TracChangeset for help on using the changeset viewer.