# pdirect.h

Go to the documentation of this file.

    00001 /*
    00002  * pdirect.h
    00003  *
    00004  * File system directory class.
    00005  *
    00006  * Portable Windows Library
    00007  *
    00008  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
    00009  *
    00010  * The contents of this file are subject to the Mozilla Public License
    00011  * Version 1.0 (the "License"); you may not use this file except in
    00012  * compliance with the License. You may obtain a copy of the License at
    00013  * http://www.mozilla.org/MPL/
    00014  *
    00015  * Software distributed under the License is distributed on an "AS IS"
    00016  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
    00017  * the License for the specific language governing rights and limitations
    00018  * under the License.
    00019  *
    00020  * The Original Code is Portable Windows Library.
    00021  *
    00022  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
    00023  *
    00024  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
    00025  * All Rights Reserved.
    00026  *
    00027  * Contributor(s): ______________________________________.
    00028  *
    00029  * $Revision: 24177 $
    00030  * $Author: rjongbloed $
    00031  * $Date: 2010-04-05 06:52:04 -0500 (Mon, 05 Apr 2010) $
    00032  */
    00033
    00034
    00035 #ifndef PTLIB_DIRECTORY_H
    00036 #define PTLIB_DIRECTORY_H
    00037
    00038 #ifdef P_USE_PRAGMA
    00039 #pragma interface
    00040 #endif
    00041
    00042 #ifdef Fifo
    00043 #undef Fifo
    00044 #endif
    00045
    00046 #ifdef _WIN32
    00047 #define PDIR_SEPARATOR '\\'
    00048 const PINDEX P_MAX_PATH = _MAX_PATH;
    00049 typedef PCaselessString PFilePathString;
    00050 #else
    00051 #define PDIR_SEPARATOR '/'
    00052 #define P_MAX_PATH    (_POSIX_PATH_MAX)
    00053 typedef PString PFilePathString;
    00054 #endif
    00055
    00057 // File System
    00058
    00063 class PFileInfo : public PObject
    00064 {
    00065   PCLASSINFO(PFileInfo, PObject);
    00066
    00067   public:
    00072     enum FileTypes {
    00074       RegularFile = 1,
    00076       SymbolicLink = 2,
    00078       SubDirectory = 4,
    00080       CharDevice = 8,
    00082       BlockDevice = 16,
    00084       Fifo = 32,
    00086       SocketDevice = 64,
    00088       UnknownFileType = 256,
    00090       AllFiles = 0x1ff
    00091     };
    00092
    00094     FileTypes type;
    00095
    00099     PTime created;
    00100
    00102     PTime modified;
    00103
    00107     PTime accessed;
    00108
    00112     PUInt64 size;
    00113
    00115     enum Permissions {
    00117       WorldExecute = 1,
    00119       WorldWrite = 2,
    00121       WorldRead = 4,
    00123       GroupExecute = 8,
    00125       GroupWrite = 16,
    00127       GroupRead = 32,
    00129       UserExecute = 64,
    00131       UserWrite = 128,
    00133       UserRead = 256,
    00135       AllPermissions = 0x1ff,
    00137       DefaultPerms = UserRead|UserWrite|GroupRead|WorldRead,
    00139       DefaultDirPerms = DefaultPerms|UserExecute|GroupExecute|WorldExecute
    00140
    00141     };
    00142
    00148     int permissions;
    00149
    00154     PBoolean hidden;
    00155 };
    00156
    00157
    00182 class PDirectory : public PFilePathString
    00183 {
    00184   PCONTAINERINFO(PDirectory, PFilePathString);
    00185
    00186   public:
    00189
    00190     PDirectory();
    00191
    00196     PDirectory(
    00197       const char * cpathname
    00198     );
    00199
    00204     PDirectory(
    00205       const PString & pathname
    00206     );
    00207
    00210     PDirectory & operator=(
    00211       const PString & pathname
    00212     );
    00213
    00216     PDirectory & operator=(
    00217       const char * cpathname
    00218     );
    00220
    00230     PDirectory GetParent() const;
    00231
    00242     PFilePathString GetVolume() const;
    00243
    00249     PBoolean IsRoot() const;
    00250
    00256     PDirectory GetRoot() const;
    00257
    00262     PStringArray GetPath() const;
    00263
    00270     PINLINE static PBoolean IsSeparator(
    00271       char ch
    00272     );
    00273
    00284     PBoolean GetVolumeSpace(
    00285       PInt64 & total,
    00286       PInt64 & free,
    00287       DWORD & clusterSize
    00288     ) const;
    00290
    00298     PBoolean Exists() const;
    00299
    00305     static PBoolean Exists(
    00306       const PString & path
    00307     );
    00308
    00314     PBoolean Change() const;
    00315
    00321     static PBoolean Change(
    00322       const PString & path
    00323     );
    00324
    00330     PBoolean Create(
    00331       int perm = PFileInfo::DefaultDirPerms    // Permission on new directory.
    00332     ) const;
    00338     static PBoolean Create(
    00339       const PString & p,
    00340       int perm = PFileInfo::DefaultDirPerms
    00341     );
    00342
    00348     PBoolean Remove();
    00349
    00355     static PBoolean Remove(
    00356       const PString & path
    00357     );
    00359
    00377     virtual PBoolean Open(
    00378       int scanMask = PFileInfo::AllFiles
    00379     );
    00380
    00395     virtual PBoolean Restart(
    00396       int scanMask = PFileInfo::AllFiles
    00397     );
    00398
    00410     PBoolean Next();
    00411
    00413     virtual void Close();
    00414
    00429     virtual PFilePathString GetEntryName() const;
    00430
    00440     virtual PBoolean IsSubDir() const;
    00441
    00447     virtual PBoolean GetInfo(
    00448       PFileInfo & info
    00449     ) const;
    00451
    00452
    00453   protected:
    00454     // New functions for class
    00455     void Construct();
    00456     void Destruct()
    00457     { Close(); PFilePathString::Destruct(); }
    00458
    00459     // Member variables
    00461     int scanMask;
    00462
    00463 // Include platform dependent part of class
    00464 #ifdef _WIN32
    00465 #include "msos/ptlib/pdirect.h"
    00466 #else
    00467 #include "unix/ptlib/pdirect.h"
    00468 #endif
    00469
    00470 };
    00471
    00472
    00473 #endif // PTLIB_DIRECTORY_H
    00474
    00475
    00476 // End Of File ///////////////////////////////////////////////////////////////