00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _OSBFILEUTIL_H_
00031 #define _OSBFILEUTIL_H_
00032
00033
00034
00035
00036 #include <string>
00037 #include <list>
00038 #include <dirent.h>
00039 #include <ios>
00040
00041
00042
00043
00044
00045 namespace OSB_LIB {
00046
00047
00048
00049
00069 class CloseFile {
00070 public:
00072 CloseFile(
00073 FILE* file,
00074 bool doClose = true
00075 );
00076 private:
00078 CloseFile(const CloseFile&);
00079 public:
00086 ~CloseFile();
00097 bool release();
00099 bool doClose() const { return doClose_ && file_ != 0; }
00100 private:
00102 bool doClose_;
00104 FILE* file_;
00105 };
00106
00110 class ScanDir {
00111 public:
00112
00113 class Select;
00115 typedef std::list<std::string> Result;
00116
00117 public:
00124 ScanDir(const std::string& dirPath);
00126 ~ScanDir();
00127 private:
00129 ScanDir(const ScanDir&);
00131 ScanDir& operator=(const ScanDir&);
00132
00133 public:
00135 const std::string& dirPath() const;
00137 Result result_;
00146 void setPath(const std::string& dirPath);
00171 size_t scan(Select& select);
00172
00173 private:
00175 std::string dirPath_;
00182 dirent* curEntry_;
00184 size_t entrySize_;
00185
00186 private:
00203 dirent* mkEntry(size_t s) const;
00211 void delEntry(dirent*& entry) const;
00213 void mkCurEntry();
00214 };
00215
00221 class ScanDir::Select {
00222 public:
00224 virtual ~Select() {}
00240 virtual int operator()(
00241 const std::string& dir,
00242 const std::string& name
00243 ) = 0;
00244 };
00245
00246
00247
00251 std::string dirName(const std::string& path);
00255 std::string baseName(const std::string& path);
00273 int mkDir(
00274 const std::string& path,
00275 bool mkParents = false
00276 );
00277
00290 bool fileExists(
00291 const std::string& path,
00292 bool ct = false
00293 );
00294
00307 bool dirExists(
00308 const std::string& path,
00309 bool ct = false
00310 );
00311
00322 bool openStream(
00323 std::fstream& stream,
00324 const std::string& path,
00325 std::ios_base::openmode openMode
00326 );
00327
00342 int fileOpenError(
00343 const std::string& path,
00344 const std::string& mode
00345 );
00346 }
00347 #endif // #ifndef _OSBFILEUTIL_H_