📄 yb_base.h
字号:
__property long D111 = { read = fGetD111 , write = fSetD111 };
__property long S000 = { read = fGetS000 , write = fSetS000 };
__property __int64 TimeStamp = { read = fGetTStamp, write = fSetTStamp };
__property int MonthDays = { read = fGetMonthDays };
__property bool IsLeap = { read = fGetIsLeap };
__property bool IsValid = { read = fIsValid };
__property DateX Date = { read = _xDate, write = _xDate };
__property TimeX Time = { read = _xTime, write = _xTime };
inline operator __int64() { return TimeStamp; }
inline operator TDateTime() { return EncodeDate(Year,Month,Day) + EncodeTime(Hour,Minute,Second,0); }
inline DateTimeX operator ++(int) { DateTimeX tt(*this); TimeStamp++; return tt; }
inline DateTimeX operator --(int) { DateTimeX tt(*this); TimeStamp--; return tt; }
inline DateTimeX operator ++() { TimeStamp++; return *this; }
inline DateTimeX operator --() { TimeStamp--; return *this; }
inline DateTimeX operator +=(long L) { TimeStamp+=L; return *this; }
inline DateTimeX operator -=(long L) { TimeStamp-=L; return *this; }
inline DateTimeX operator +(int i) { DateTimeX tt(*this); tt.TimeStamp+=i; return tt; }
inline DateTimeX operator -(int i) { DateTimeX tt(*this); tt.TimeStamp-=i; return tt; }
inline __int64 operator -(DateTimeX t) { return TimeStamp - t.TimeStamp; }
inline bool operator > (DateTimeX x) { return TimeStamp > x.TimeStamp; }
inline bool operator < (DateTimeX x) { return TimeStamp < x.TimeStamp; }
inline bool operator >=(DateTimeX x) { return TimeStamp >= x.TimeStamp; }
inline bool operator <=(DateTimeX x) { return TimeStamp <= x.TimeStamp; }
inline bool operator ==(DateTimeX x) { return TimeStamp == x.TimeStamp; }
inline bool operator !=(DateTimeX x) { return TimeStamp != x.TimeStamp; }
bool SetToSystem(void);
private:
inline int fGetMonth(void) { return _xDate.Month; }
inline int fGetDay(void) { return _xDate.Day; }
inline int fGetYear(void) { return _xDate.Year; }
inline int fGetHour(void) { return _xTime.Hour; }
inline int fGetMinute(void) { return _xTime.Minute; }
inline int fGetSecond(void) { return _xTime.Second; }
inline long fGetD111(void) { return _xDate.D111; }
inline long fGetS000(void) { return _xTime.S000; }
inline int fGetDOW(void) { return _xDate.DOW; }
inline void fSetMonth(int m) { _xDate.Month = m; }
inline void fSetDay(int d) { _xDate.Day = d; }
inline void fSetYear(int y) { _xDate.Year = y; }
inline void fSetHour(int h) { _xTime.Hour = h; }
inline void fSetMinute(int m) { _xTime.Minute = m; }
inline void fSetSecond(int s) { _xTime.Second = s; }
inline void fSetD111(long d) { _xDate.D111 = d; }
inline void fSetS000(long s) { _xTime.S000 = s; }
__int64 fGetTStamp(void);
void fSetTStamp(__int64);
bool fIsValid(void);
inline int fGetMonthDays(void) { return _xDate.MonthDays; }
inline bool fGetIsLeap(void) { return _xDate.IsLeap; }
DateX _xDate;
TimeX _xTime;
};
//---------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////////
//---------------------------------------------------------------------------
// Class TRelPath //
//-------------------------------------------------------------------------//
// 文件路径处理, 支持网络路径,而 C++ Builder 的文件名函数不支持 //
// 在“网上邻居”上执行文件的路径 \\COMPUTER\SHARENAME\PATH\FILENAME.EXT //
// Novell Netware 支持另一种路径 FS\VOLUMNNAME:PATH\FILENAME.EXT //
//-------------------------------------------------------------------------//
class PACKAGE TRelPath
{
public:
enum TPathType
{
ptExecutable, // .exe 文件的路径
ptWindows, // C:\\WINDOWS
ptSystem, // C:\\WINDOWS\\SYSTEM
ptCurrent, // 当前路径
ptTemporary, // 临时文件存放的路径 %TEMP%
ptCustom, // 自定义
ptModule, // 当前 module 路径, .exe 或 .dll 等
ptProgFiles, // C:\\Program Files
ptProgCommon, // C:\\Program Files\\Common Files
ptDesktop, // C:\\Documents and Settings\\username\\Desktop
ptMyDocuments, // C:\\Documents and Settings\\username\\My Documents
ptAppData, // C:\\Documents and Settings\\username\\Application Data
ptStartMenu, // C:\\Documents and Settings\\username\\Start Menu
ptStMenuProg, // C:\\Documents and Settings\\username\\Start Menu\\Programs
ptStMenuStartup, // C:\\Documents and Settings\\username\\Start Menu\\Programs\\Startup
};
TRelPath(TVictorString asRelative="");
TRelPath(TPathType ptType, TVictorString asRelative="");
TRelPath(TVictorString asRootPath, TVictorString asRelative);
virtual ~TRelPath() {}
void Assign(TRelPath *);
void Assign(TVictorString p, TVictorString r="");
__property TPathType PathType = { read=_PathType , write=SetPathType };
__property TVictorString RootPath = { read=_asRootPath , write=SetRootPath };
__property TVictorString Relative = { read=_asRelative , write=SetRelative };
__property TVictorString FullPath = { read=fGetFullPath, write=fSetFullPath };
operator AnsiString();
operator TVictorString();
TRelPath &operator = (TRelPath &rp);
TRelPath &operator = (AnsiString s);
TRelPath &operator = (TVictorString s);
TVictorString FileName(TVictorString s); //RootPath+Relative+s
TVictorString FileName(TVictorString s, TVictorString e); //RootPath+Relative+s+"."+e
TVictorString Extension(TVictorString s); //RootPath+Relative+ExeFileName+"."+s
TVictorString FormatName(const char *fmt, ...); //printf(fmt, ...);
TVictorString FormatExtension(const char *fmt, ...); //printf(fmt, ...);
private:
void Initialize(TPathType ptType, TVictorString asRootPath, TVictorString asRelative); //Called internally
void SetPathType(TPathType t);
void SetRootPath(TVictorString s);
void SetRelative(TVictorString s);
TVictorString fGetFullPath(void);
void fSetFullPath(TVictorString);
TPathType _PathType; //default = ptExecutable
TVictorString _asRootPath; //"D:\\PATH\\", "\\SERVER\\VOL\\PATH\\", "SERVER\\VOL:PATH\\"
TVictorString _asRelative; //"DATAPATH\\"
TVictorString _asExeFulln; //"D:\\PATH\\FILENAME.EXT"
};
//---------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////////
//---------------------------------------------------------------------------
// TBinFile: 带格式的二进制文件读写,文件格式:文件头 + 记录[] //
// 错误信息用 try ... catch 捕捉,错误类名:EBinFileError //
//---------------------------------------------------------------------------
class PACKAGE TBinFile
{
public:
enum TOpenMode { omRead=1, omWrite=2, omCreateNew=4, omAutoCreate=8 }; //读, 写, 建新文件, 如果文件不存在建新文件
enum TShareMode { shDenyNone=0, shDenyRead=1, shDenyWrite=2, shDenyAll=3, shDefault=8}; //不锁, 锁读, 锁写, 全锁, 缺省
__fastcall TBinFile(size_t nHeaderSize=0, size_t nRecordSize=0);
virtual __fastcall ~TBinFile();
__property TVictorString FileName = { read=_asFileName, write=fSetFileName }; //文件名
__property long OpenMode = { read=_OpenMode , write=fSetOpenMode }; //打开方式
__property long ShareMode = { read=_ShareMode, write=fSetShareMode}; //共享模式
__property bool Buffered = { read=_bBuffered, write=fSetBuffered }; //是否用缓存
__property bool Active = { read=Opened , write=fSetActive }; //打开/关闭/判断是否已打开
__property long RecNo = { read=_NewRecNo , write=_NewRecNo }; //记录号
__property long RecordCount = { read=fGetRecCount, write=fSetRecCount}; //记录总数, 设置此值会截断/增加文件
__property long Pos = { read=fGetCursPos , write=fSetCursPos }; //文件指针位置
__property long Size = { read=fGetFileSize, write=fSetFileSize}; //文件长度的字节数
__property DateTimeX Time = { read=fGetFileTime, write=fSetFileTime}; //文件时间
__property int Attrib = { read=fGetFileAttr, write=fSetFileAttr}; //文件属性(FA_RDONLY|FA_HIDDEN|FA_SYSTEM|FA_LABEL|FA_DIREC|FA_ARCH)
__property long Handle = { read=fGetHandle}; //只读属性:文件句柄
__property FILE* FileStream = { read=_fBin }; //只读属性:文件流指针
__property bool Exists = { read=fGetExists}; //只读属性:文件是否存在,在不打开文件的情况下可以判断
__property size_t HeaderSize = { read = _HeaderSize }; //只读属性:文件头长度
__property size_t RecordSize = { read = _RecordSize }; //只读属性:一条记录的长度
inline operator FILE* () { return _fBin; }
virtual int __fastcall Seek(long offset, int whence);
virtual size_t __fastcall Read(void *ptr, size_t n);
virtual size_t __fastcall Write(const void *ptr, size_t n);
virtual void __fastcall ReadHeader(void *lpHeader); //读文件头
virtual void __fastcall WriteHeader(void *lpHeader); //写文件头
virtual void __fastcall ReadRecord(void *lpBuffer); //读记录
virtual void __fastcall WriteRecord(void *lpBuffer); //写记录
virtual void __fastcall ReadRecord(void *lpBuffer, long iRecNo); //读指定的记录
virtual void __fastcall WriteRecord(void *lpBuffer, long iRecNo); //写指定的记录
virtual void __fastcall Open(void); //打开文件,相当于设置属性 Active = true
virtual void __fastcall Close(void); //关闭文件,相当于设置属性 Active = false
virtual void __fastcall Flush(void); //在不关闭文件的情况下把所有改动和CACHE内容更新到磁盘
virtual bool __fastcall Opened(void) { return _fBin!=NULL; } //判断文件是否打开,相当于读属性 Active
virtual void __fastcall Refresh(void) { _OldRecNo=-1; _bHeaderOK=false; } //在 Buffered=true 的情况下,刷新 Buffer 为磁盘最新内容
virtual void __fastcall Remove(void); //删除文件
private:
void __fastcall fSetFileName(TVictorString s);
void __fastcall fSetOpenMode(long m);
void __fastcall fSetShareMode(long m);
void __fastcall fSetBuffered(bool b) { _OldRecNo = -1; _bBuffered = b; _bHeaderOK=false; }
long __fastcall fGetHandle(void) { return _fBin ? fileno(_fBin) : -1; }
void __fastcall fSetActive(bool bActive) { if(bActive) Open(); else Close(); }
long __fastcall fGetRecCount(void);
void __fastcall fSetRecCount(long n);
long __fastcall fGetFileSize(void);
void __fastcall fSetFileSize(long n);
DateTimeX __fastcall fGetFileTime(void);
void __fastcall fSetFileTime(DateTimeX);
int __fastcall fGetFileAttr(void);
void __fastcall fSetFileAttr(int);
long __fastcall fGetCursPos(void);
void __fastcall fSetCursPos(long n);
bool __fastcall fGetExists(void);
private:
FILE *_fBin;
long _OpenMode, _ShareMode;
size_t _HeaderSize, _RecordSize;
long _OldRecNo, _NewRecNo;
char *_BufHeader, *_BufRecord;
bool _bBuffered, _bHeaderOK;
TVictorString _asFileName;
};
//---------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////////
//---------------------------------------------------------------------------
class PACKAGE EBinFileError:public Exception
{
public:
enum TErrorCode
{
BFERR_UNKNOWN = 0, //未知错误
BFERR_NOFILENAME = 1, //文件名属性为空
BFERR_OPEN = 2, //不能打开文件
BFERR_CREATE = 3, //不能建新文件
BFERR_READHEAD = 4, //读文件头错误
BFERR_WRITEHEAD = 5, //写文件头错误
BFERR_READRECORD = 6, //读记录错误
BFERR_WRITERECORD = 7, //写记录错误
BFERR_RECNO = 8, //记录号错误
BFERR_NOT_OPENED = 9, //读写时文件没打开
BFERR_NOWRITEPROPERTY = 10, //写文件但是没有写属性
BFERR_CHANGEFILESIZE = 11, //不能改变文件大小
BFERR_ERASE = 12, //不能删除文件
BFERR_GETFATTRIB = 13, //不能得到文件属性
BFERR_SETFATTRIB = 14, //不能修改文件属性
BFERR_GETFTIME = 15, //不能得到文件时间
BFERR_SETFTIME = 16, //不能修改文件时间
};
public:
__property TErrorCode ErrorCode = { read = _iErrorCode };
__property int SubErrCode = { read = _iSubErrCode };
__property TVictorString FileName = { read = _FileName };
__fastcall EBinFileError(TVictorString fName, TErrorCode ecErrCode, int iErrNo);
protected:
TErrorCode _iErrorCode; //BinFile Error
int _iSubErrCode; //OS errno
TVictorString _FileName; //FileName
private:
class MessageStrings
{
public:
__fastcall MessageStrings();
typedef struct {TErrorCode Code ; char *Msg ; } ERRMSG;
typedef struct {int ErrNo; char *Info; } STD_ERRSTR;
__property TVictorString ErrMsg[TErrorCode] = { read = fGetErrMsg };
__property TVictorString StdMsg[int ] = { read = fGetStdMsg };
__property TVictorString Unknown = { read = fGetUnknown};
__property TVictorString CuowuXinxi = { read = fGetCuowuXx};
private:
TVictorString __fastcall fGetErrMsg(TErrorCode ecCode);
TVictorString __fastcall fGetStdMsg(int iErrNo);
TVictorString __fastcall fGetUnknown(void);
TVictorString __fastcall fGetCuowuXx(void);
ERRMSG *BfErr_Messages;
STD_ERRSTR *StdErrInfo;
char *Err_Unknown;
char *Err_CuowuXinxi;
static ERRMSG BfErr_Messages_Chs[], BfErr_Messages_Cht[], BfErr_Messages_Enu[];
static STD_ERRSTR StdErrInfo_Chs [], StdErrInfo_Cht [], StdErrInfo_Enu [];
static char Err_Unknown_Chs [], Err_Unknown_Cht [], Err_Unknown_Enu [];
static char Err_CuowuXinxi_Chs[], Err_CuowuXinxi_Cht[], Err_CuowuXinxi_Enu[];
};
};
//---------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////////
//---------------------------------------------------------------------------
class PACKAGE TCRC32 //CCITT 校验码是取反的校验码值
{
public:
TCRC32(unsigned __int32 InitValue=0xffffffffui32);
inline operator unsigned __int32 () { return CRC; }
inline TCRC32 & operator << (unsigned __int8 c) { CRC = TB[(CRC^c) & 0xff] ^ (CRC>>8); return *this; }
__property unsigned __int32 Value = { read = CRC };
unsigned __int32 Check(void *p, unsigned long n);
inline void Reset(void) { CRC = _InitValue; }
inline void Reset(unsigned __int32 InitValue) { CRC = _InitValue = InitValue; }
__property const unsigned __int32 * Table = { read = fGetTable };
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -