123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #ifndef _RAR_FILE_
- #define _RAR_FILE_
- #ifdef _WIN_ALL
- typedef HANDLE FileHandle;
- #define BAD_HANDLE INVALID_HANDLE_VALUE
- #else
- typedef FILE* FileHandle;
- #define BAD_HANDLE NULL
- #endif
- class RAROptions;
- enum FILE_HANDLETYPE {FILE_HANDLENORMAL,FILE_HANDLESTD,FILE_HANDLEERR};
- enum FILE_ERRORTYPE {FILE_SUCCESS,FILE_NOTFOUND,FILE_READERROR};
- struct FileStat
- {
- uint FileAttr;
- uint FileTime;
- int64 FileSize;
- bool IsDir;
- };
- class File
- {
- private:
- void AddFileToList(FileHandle hFile);
- FileHandle hFile;
- bool LastWrite;
- FILE_HANDLETYPE HandleType;
- bool SkipClose;
- bool IgnoreReadErrors;
- bool NewFile;
- bool AllowDelete;
- bool AllowExceptions;
- #ifdef _WIN_ALL
- bool NoSequentialRead;
- #endif
- protected:
- bool OpenShared;
- public:
- char FileName[NM];
- wchar FileNameW[NM];
- FILE_ERRORTYPE ErrorType;
- uint CloseCount;
- public:
- File();
- virtual ~File();
- void operator = (File &SrcFile);
- bool Open(const char *Name,const wchar *NameW=NULL,bool OpenShared=false,bool Update=false);
- void TOpen(const char *Name,const wchar *NameW=NULL);
- bool WOpen(const char *Name,const wchar *NameW=NULL);
- bool Create(const char *Name,const wchar *NameW=NULL,bool ShareRead=true);
- void TCreate(const char *Name,const wchar *NameW=NULL,bool ShareRead=true);
- bool WCreate(const char *Name,const wchar *NameW=NULL,bool ShareRead=true);
- bool Close();
- void Flush();
- bool Delete();
- bool Rename(const char *NewName,const wchar *NewNameW=NULL);
- void Write(const void *Data,size_t Size);
- int Read(void *Data,size_t Size);
- int DirectRead(void *Data,size_t Size);
- void Seek(int64 Offset,int Method);
- bool RawSeek(int64 Offset,int Method);
- int64 Tell();
- void Prealloc(int64 Size);
- byte GetByte();
- void PutByte(byte Byte);
- bool Truncate();
- void SetOpenFileTime(RarTime *ftm,RarTime *ftc=NULL,RarTime *fta=NULL);
- void SetCloseFileTime(RarTime *ftm,RarTime *fta=NULL);
- static void SetCloseFileTimeByName(const char *Name,RarTime *ftm,RarTime *fta);
- void GetOpenFileTime(RarTime *ft);
- bool IsOpened() {return(hFile!=BAD_HANDLE);};
- int64 FileLength();
- void SetHandleType(FILE_HANDLETYPE Type);
- FILE_HANDLETYPE GetHandleType() {return(HandleType);};
- bool IsDevice();
- void fprintf(const char *fmt,...);
- static bool RemoveCreated();
- FileHandle GetHandle() {return(hFile);};
- void SetIgnoreReadErrors(bool Mode) {IgnoreReadErrors=Mode;};
- char *GetName() {return(FileName);}
- int64 Copy(File &Dest,int64 Length=INT64NDF);
- void SetAllowDelete(bool Allow) {AllowDelete=Allow;}
- void SetExceptions(bool Allow) {AllowExceptions=Allow;}
- #ifdef _WIN_ALL
- void RemoveSequentialFlag() {NoSequentialRead=true;}
- #endif
- };
- #endif
|