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 #if !defined(__JFILE__)
00028 #define __JFILE__
00029
00030
00031 #include "standard.h"
00032 #if defined(CYGWIN)
00033 #include <unistd.h>
00034 #endif
00035 #ifdef WIN32
00036 #if !defined(_WIN32_WCE)
00037 #include <io.h>
00038 #include <sys/types.h>
00039 #include <sys/stat.h>
00040 #include <fcntl.h>
00041 #if !defined(CYGWIN)
00042 #include <direct.h>
00043 #endif
00044 #endif
00045 #include "direntwin.h"
00046 #else
00047 #include <limits.h>
00048 #include <stdlib.h>
00049 #ifdef Darwin
00050 #include <sys/types.h>
00051 #include <sys/stat.h>
00052 #include <sys/dir.h>
00053 #include <fcntl.h>
00054 #else
00055 #include <dirent.h>
00056
00057 #include <sys/types.h>
00058 #include <sys/stat.h>
00059 #include <fcntl.h>
00060 #include <errno.h>
00061 #endif // Darwin
00062 #endif // WIN32
00063
00064 #include "Object.h"
00065 #include "JTime.h"
00066 #include "Collection.h"
00067
00068 namespace cmlabs {
00069
00070 class JFile : public Object {
00071 public:
00072
00073 static JString readAFileASCII(const JString& name);
00074 static char* readAFileASCII(const JString& name, int &length);
00075 static char* readAFileBinary(const JString& name, int &length);
00076 static bool readAFileASCII(const JString& name, char* data, int &length);
00077 static bool readAFileBinary(const JString& name, char* data, int &length);
00078
00079 static bool writeAFileASCII(const JString& name, const JString& text);
00080 static bool writeAFileASCII(const JString& name, char* str, int length);
00081 static bool writeAFileBinary(const JString& name, char* str, int length);
00082
00083 static bool appendToAFileASCII(const JString& name, const JString& text);
00084 static bool appendToAFileASCII(const JString& name, char* str, int length);
00085
00086 static Collection getFilesInADir(const JString& name);
00087 static bool deleteAFile(const JString& name);
00088 static bool deleteADir(const JString& name, bool recursive);
00089
00090 static unsigned long getAFileSize(const JString& name);
00091 static bool doesAFileExist(const JString& name);
00092 static bool doesADirExist(const JString& name);
00093
00094 static bool moveADir(const JString& from, const JString& to);
00095 static bool moveAFile(const JString& from, const JString& to);
00096
00097 static bool createADir(const JString& fname);
00098 static bool createADir(const JString& fname, bool recursive);
00099
00100 static JString getPathFromFullName(const JString& fname);
00101 static JString getFileNameFromFullName(const JString& fname);
00102
00103 static JString findDirWithFile(Collection& dirs, const JString& filename);
00104 static JString findDirWithFileFullPath(Collection& dirs, const JString& filename);
00105
00106
00107
00108 JFile(const JString& filedirname);
00109 ~JFile(void);
00110
00111 Object* clone() const;
00112 bool createFile(bool asBinary);
00113 bool createDir(bool recursive = false);
00114 bool openFile(bool asBinary);
00115 bool closeFile();
00116
00117 bool deleteFile(bool force = false);
00118 bool deleteDir(bool recursive = false);
00119
00120 bool move(const JString& newname);
00121
00122 bool lock();
00123 bool unlock();
00124 bool flush();
00125
00126 bool truncate();
00127
00128 bool gotoStart();
00129 bool gotoEnd();
00130 bool gotoPos(int pos);
00131 bool isAtEOF();
00132 bool isInError();
00133
00134 bool isValid();
00135 bool exists();
00136 bool isADir();
00137 bool isAFile();
00138
00139 Collection getFilesInDir();
00140
00141 char* readBinary(int &length);
00142 JString readAscii(int &length);
00143 JString readLine();
00144 bool writeBinary(char* str, int &length);
00145 bool writeAscii(const JString& str);
00146 bool writeLine(const JString& str);
00147
00148 int getSize();
00149 bool isFileReadable();
00150 bool isFileWritable();
00151 bool isFileExecutable();
00152 bool isFileBinary();
00153
00154 JTime getLastAccessTime();
00155 JTime getLastModifyTime();
00156 JTime getCreationTime();
00157
00158 JString getFileNameOnly();
00159 JString getDirNameOnly();
00160 JString getFullPathName();
00161
00162
00163 bool deleteFile(const JString& name);
00164 bool deleteDir(const JString& name);
00165 bool changeAttr(const JString& name, bool read, bool write);
00166
00167
00168 protected:
00169 bool doesExist;
00170 bool isDirectory;
00171 bool isReadable;
00172 bool isWritable;
00173 bool isExecutable;
00174 int isBinary;
00175 int size;
00176 bool isEOF;
00177
00178 JString name;
00179 JTime lastAccessTime;
00180 JTime lastModifyTime;
00181 JTime creationTime;
00182
00183 FILE* fileptr;
00184
00185 bool collectFileInfo();
00186
00187 };
00188
00189 }
00190
00191 #endif // __JFILE__