1 /**
2 *  Copyright Mikael H�gdahl - triyana@users.sourceforge.net
3 *
4 *  This source is distributed under the terms of the Q Public License version 1.0,
5 *  created by Trolltech (www.trolltech.com).
6 */
7 
8 #ifndef MHFile_h
9 #define MHFile_h
10 
11 #include "MH.h"
12 #include "MHString.h"
13 
14 class MHVector;
15 
16 
17 
18 /**
19 * File wrapper object
20 */
21 class MHFile : public MH {
22 public:
23     MHString                aName;
24     MHString                aPath;
25     MHString                aFullName;
26     int                     aSize;
27     int                     aType;
28     int                     aOwner;
29     int                     aGroup;
30     int                     aDate;
31     bool                    aMode[9];
32 
33     enum {
34                             IS_DIR    = 1,
35                             IS_FILE   = 2,
36                             IS_LINK   = 4,
37                             IS_CHAR   = 8,
38                             IS_BLOCK  = 16,
39                             IS_SOCK   = 32,
40                             IS_FIFO   = 64,
41                             IS_OTHER  = 128,
42                             IS_NONE   = 256,
43                             ALL       = 512,
44                             SORT_NAME = 0,
45                             SORT_TYPE,
46     };
47 
MHFile()48                             MHFile () {Set(0, 0);}
49                             MHFile (const char* fileName, const char* dir = ".") {Set(fileName, dir);}
~MHFile()50                             ~MHFile () {;}
51 
Compare(const MH * o,int type)52     int                     Compare (const MH* o, int type) {if (type == SORT_TYPE) return compareType((MHFile*)o); else return compareName((MHFile*)o);}
53     bool                    Delete ();
Exist()54     bool                    Exist () {return aType != IS_NONE;}
55     const char*             FullName ();
GetFullName()56     const char*             GetFullName () {return aFullName();}
IsDir()57     bool                    IsDir () {return aType == IS_DIR;}
IsFile()58     bool                    IsFile () {return aType == IS_FILE;}
Rename(MHFile * newFile)59     bool                    Rename (MHFile* newFile) {return MHFile::Rename (aFullName(), newFile->aFullName());}
Size()60     int                     Size () {return aSize;}
61     void                    Set (const char* fileName, const char* dir);
Set(MHFile * file)62     void                    Set (MHFile* file) {Set(file->aName(), file->aPath());}
63     void                    Touch ();
64 
65     static bool             Copy (const char* from, const char* to);
66     static int              CountRows (const char* fileName);
Delete(const char * fileName)67     static bool             Delete (const char* fileName) {MHFile f(fileName, ""); return f.Delete ();}
Exist(const char * fileName)68     static bool             Exist (const char* fileName) {MHFile f(fileName, ""); return f.Exist ();}
69     static int              Glob (const char* dirName, const char* pattern, int type, MHVector* out);
IsDir(const char * fileName)70     static bool             IsDir (const char* fileName) {MHFile f(fileName, ""); return f.IsDir ();}
IsFile(const char * fileName)71     static bool             IsFile (const char* fileName) {MHFile f(fileName, ""); return f.IsFile ();}
Size(const char * fileName)72     static int              Size (const char* fileName) {MHFile f(fileName, ""); return f.aSize;}
73     static char*            Read (const char* fileName, int& size);
74     static bool             Rename (const char* from, const char* to);
75     static void             Write (const char* fileName, const char* buffer, int size, bool compress);
76 
77 private:
78     static int              aaInitCompress;
79 
compareName(MHFile * file)80     int                     compareName (MHFile* file) {return strcmp(aName(), file->aName.Get());}
compareType(MHFile * file)81     int                     compareType (MHFile* file) {return (aType == file->aType) ? 0 : ((aType < file->aType) ? -1 : 1);}
82 };
83 
84 #endif
85 
86