00001
00002
00003
00004
00005
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
00031
00032 #ifndef DirectoryH
00033 #define DirectoryH
00034
00035 #include <zeusbase/System/Interfaces/IZUnknown.hpp>
00036 #include <zeusbase/System/Interfaces/IList.hpp>
00037 #include <zeusbase/System/DirectoryItem.h>
00038 #include <zeusbase/System/String.h>
00039 #include <zeusbase/System/ZObject.h>
00040
00041
00042 #if defined(ENABLE_LINUX_BINDING)
00043 #define PATH_DELIMITER L'/'
00044 #else
00045 #define PATH_DELIMITER L'\\'
00046 #endif
00047
00048 #define USERPATH_DELIMITER L'~'
00049
00050 BEGIN_NAMESPACE_Zeus
00051
00052
00055
00056 zeusbase_class TDirectory : public TZObject
00057 {
00058 public:
00059
00062
00063 enum EFolderType
00064 {
00065 etCommonAdminTools,
00066 etCommonAltStartup,
00067 etCommonApplicationData,
00068 etCommonDesktop,
00069 etCommonDocuments,
00070 etCommonFavorits,
00071 etCommonPrograms,
00072 etCommonStartMenu,
00073 etCommonStartup,
00074 etCommonTemplates,
00075 etControls,
00076 etCookies,
00077 etDesktop,
00078 etDrives,
00079 etFonts,
00080 etHistory,
00081 etInternet,
00082 etInternetCache,
00083 etLibraries,
00084 etLocalApplicationData,
00085 etMyMusic,
00086 etMyPictures,
00087 etNetHood,
00088 etNetwork,
00089 etPrinters,
00090 etPrintHood,
00091 etProfile,
00092 etProgramFiles,
00093 etProgramFilesCommon,
00094 etRecent,
00095 etSendTo,
00096 etSystem,
00097 etTrashBin,
00098 etUserAdminTools,
00099 etUserAltStartup,
00100 etUserApplicationData,
00101 etUserDesktop,
00102 etUserDocuments,
00103 etUserFavorits,
00104 etUserHome,
00105 etUserPrograms,
00106 etUserStartmenu,
00107 etUserStartup,
00108 etUserTemplates,
00109 etMedia
00110 };
00111
00112
00114
00115 class TFilter
00116 {
00117 public:
00119 inline TFilter(const wchar_t* pwcFileName, bool bFiles = true, bool bDirectories = true)
00120 {
00121 init(pwcFileName, bFiles, bDirectories);
00122 }
00123
00125 inline TFilter(const IString& strFileName, bool bFiles = true, bool bDirectories = true)
00126 {
00127 init(strFileName.c_bstr(), bFiles, bDirectories);
00128 }
00129
00131 inline const TString& getFileName() const { return m_strFileName; }
00132
00134 inline bool containsFiles() const { return m_bFiles; }
00135
00137 inline bool containsDirectories() const { return m_bDirectories; }
00138
00140 inline bool containsFilesAndDirectories() const { return containsFiles() && containsDirectories(); }
00141
00142 private:
00144 inline void init(const wchar_t* pwcFileName, bool bFiles, bool bDirectories)
00145 {
00146 m_strFileName = pwcFileName;
00147 m_bFiles = bFiles;
00148 m_bDirectories = bDirectories;
00149 }
00150
00151 private:
00153 TString m_strFileName;
00154
00156 bool m_bFiles;
00157
00159 bool m_bDirectories;
00160 };
00161
00162 TDirectory();
00163 TDirectory(const TString& strDirName);
00164 TDirectory(const TDirectoryItem& rItem);
00165 TDirectory(const TDirectory& rDirectory);
00166 virtual ~TDirectory();
00167
00168 const TString& getDirName() const;
00169 Retval makeAbsolute(const TString& strBasePath, bool bMustExists);
00170 bool makeDirectory(bool bCreateDeep = false);
00171 bool removeDirectory(bool bForce = false);
00172 bool rename(const TString& strNewName);
00173 bool isAbsolute() const;
00174 bool isEmpty() const;
00175 bool exists() const;
00176 bool equals(const TDirectory& rDirectory) const;
00177 bool equals(const IString& rDirectoryName) const;
00178 Retval getDirectoryContent(IList<TDirectoryItem>& rList, bool bRecursive) const;
00179 Retval getDirectoryContent(IList<TDirectoryItem>& rList, const TFilter& rFilter, bool bRecursive) const;
00180 Int getDirectoryContentCount(bool bRecursive) const;
00181 Int getDirectoryContentCount(const TFilter& rFilter, bool bRecursive) const;
00182 bool setFilesReadOnly(bool bValue, bool bRecursive);
00183 void simplifyPathName(bool* pbError = NULL);
00184
00185
00186 TDirectory& operator=(const TDirectory& rDirectory);
00187 bool operator==(const TDirectory& rDirectory) const;
00188 bool operator==(const TString& rDirectory) const;
00189 bool operator!=(const TDirectory& rDirectory) const;
00190 bool operator!=(const TString& rDirectory) const;
00191
00192
00193 TString toString() const;
00194
00195
00196 static inline TDirectory getCurrentDirectory(bool& rError) { return getWorkingDirectory(rError); }
00197 static inline Retval setCurrentDirectory(const IString& strDirectory) { return setWorkingDirectory(strDirectory); }
00198 static TDirectory getWorkingDirectory(bool& rError);
00199 static bool setFilesReadOnly(const IString& strDirectory, bool bValue, bool bRecursive);
00200 static Retval setWorkingDirectory(const IString& strDirectory);
00201 static TString simplifyPathName(const IString& rstrPathName, bool* pbError = NULL);
00202
00203 static TDirectory getUserDirectory(bool& rError);
00204 static TDirectory getTempDirectory(bool& rError);
00205 static TDirectory getSystemDirectory(EFolderType eFolder, bool& rError);
00206 static Retval getSystemDirName(EFolderType eFolder, TString& rDirName);
00207
00208 private:
00210 TString m_strDirName;
00211
00212 static TString completePath(TString path);
00213
00214 };
00215
00216
00217
00218
00223
00224 inline bool TDirectory::isAbsolute() const
00225 {
00226 bool bRetval = false;
00227 #if defined(ENABLE_LINUX_BINDING)
00228 if (m_strDirName.getChar(0) == L'/')
00229 {
00230 bRetval = true;
00231 }
00232 #else
00233 if (m_strDirName.getFirstPos(L":") >= 0)
00234 {
00235 bRetval = true;
00236 }
00237 #endif
00238 return bRetval;
00239 }
00240
00241
00244
00245 inline const TString& TDirectory::getDirName() const
00246 {
00247 return m_strDirName;
00248 }
00249
00250
00259
00260 inline bool TDirectory::setFilesReadOnly(const IString& strDirectory, bool bValue, bool bRecursive)
00261 {
00262 TDirectory Dir(strDirectory);
00263 return Dir.setFilesReadOnly(bValue, bRecursive);
00264 }
00265
00266
00272
00273 inline Retval TDirectory::getDirectoryContent(IList<TDirectoryItem>& rList,
00274 bool bRecursive) const
00275 {
00276 return getDirectoryContent(rList, L"*.*", bRecursive);
00277 }
00278
00279
00284
00285 inline Int TDirectory::getDirectoryContentCount(bool bRecursive) const
00286 {
00287 return getDirectoryContentCount(L"*.*", bRecursive);
00288 }
00289
00290
00293
00294 inline bool TDirectory::isEmpty() const
00295 {
00296 return (getDirectoryContentCount(TFilter(L"*.*"), false) == 0);
00297 }
00298
00299
00302
00303 inline void TDirectory::simplifyPathName(bool* pbError )
00304 {
00305 m_strDirName = TDirectory::simplifyPathName(m_strDirName, pbError);
00306 }
00307
00308
00311
00312 inline TString TDirectory::toString() const
00313 {
00314 return m_strDirName;
00315 }
00316
00317
00320
00321 inline bool TDirectory::operator==(const TDirectory& rDirectory) const
00322 {
00323 return this->equals(rDirectory);
00324 }
00325
00326
00329
00330 inline bool TDirectory::operator==(const TString& rDirectory) const
00331 {
00332 return this->equals(rDirectory);
00333 }
00334
00335
00338
00339 inline bool TDirectory::operator!=(const TDirectory& rDirectory) const
00340 {
00341 return !this->equals(rDirectory);
00342 }
00343
00344
00347
00348 inline bool TDirectory::operator!=(const TString& rDirectory) const
00349 {
00350 return !this->equals(rDirectory);
00351 }
00352
00353
00354 END_NAMESPACE_Zeus
00355
00356 #endif