📄 dbfile.h
字号:
// DBFile1.h: interface for the CDBFile class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_DBFILE1_H__EC86B19E_254A_45D6_89E9_B0115D895759__INCLUDED_)
#define AFX_DBFILE1_H__EC86B19E_254A_45D6_89E9_B0115D895759__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
typedef struct {
char flag[2]; // 标志
char Result[16]; // 结果
} EL_DBFileHeadTag; //文件头
typedef struct{
DWORD InfoLen;
char *Info;
} EL_DBFileInfo; // 信息头
typedef struct {
char state[2]; // 表头标志
DWORD FieldNum; //多少个域
DWORD FieldLen ; //域名一共长度
}EL_FieldHeadTag; // 域名头描述
typedef struct {
char FieldName[20]; // 域名
char FieldType; // 数据类型
}EL_FieldTag; //域名数据结构
// 数据区描述
typedef struct {
char state[2]; // 标志
DWORD DataNum; // 数据信息数量
DWORD DataLen; // 数据长度
}EL_DataHeadTag;
// 一个记录描述
typedef struct {
DWORD RecordNo; // 记录编号
DWORD RecordLen; // 记录数长度
DWORD RecordNum; // 记录数
}EL_RecordTag;
// 一个记录中域的数据
typedef struct {
DWORD DataSize; // 数据尺寸
BYTE *DataBuff; // 数据
}EL_FieldDataTag;
// 索引区信息头
typedef struct {
char state[2]; // 索引表标志
DWORD IndexType ; // 索引方式表示
DWORD IndexNum; // 索引数量
DWORD IndexLen; // 索引区长度
}EL_IndexHeadTag;
typedef struct {
DWORD index;
}SEEK_TAG;
#define FILEINFO_OFFSET sizeof(EL_DBFileHeadTag)
#include "MFile.h" // Added by ClassView
class CDBFile
{
public:
CDBFile();
virtual ~CDBFile();
//打开操作模式
enum { DB_MODE_READ=0 , DB_MODE_CREATE ,DB_MODE_APPEND};
//打开打包的文件
int Open(int mode,char *fn=NULL);
//打开打包的内存
int OpenMem(char *buf,int len,int mode);
//获取内存打包的数据
char *GetMem(int *len){ return m_mfile.getdata(len); }
//关闭打包
int Close();
// 设置包文件路径
void SetFilePath(char *pPath) {strcpy(m_dbfilename,pPath);}
//
//
protected:
EL_DBFileHeadTag m_head;
EL_DBFileInfo m_info; // 信息头
EL_FieldHeadTag m_fieldhd; //表头信息区头
DWORD get_fieldoffset() ;
EL_FieldTag *m_fieldname; //表名信息列表
EL_DataHeadTag m_datahd ; // 数据区
DWORD get_dataoffset(); // 数据区其实位置
EL_RecordTag m_record; // 记录集
EL_FieldDataTag *m_fielddata; // 记录数据
BYTE *m_DataBuffer; //
SEEK_TAG *m_index;
EL_IndexHeadTag m_indexhd;
DWORD get_indexoffset();
int m_onum;
FILE *m_fp;
int get_recordcount(); // 获得记录总数
char m_dbfilename[80];
protected:
int CreateFile(char *fn);
int OpenFile(char *fn);
int AddFile(char *fn);
int WriteFileInfo();
int ReadFileInfo();
int WriteField();
int ReadField();
int WriteDataHead();
int ReadDataHead();
int WriteRecord();
int ReadRecord();
int AppendRecord();
int SeekRecord(int i);
int CreateIndex();
int ReadIndex();
int WriteIndex();
int m_curindex;
int GetCurSel(){ return m_curindex;}
protected:
EL_FieldTag *NewFieldTag(int num);
BYTE *NewDataBuff(int id,int len);
EL_FieldDataTag *NewFieldDataTag(int num);
char *NewInfo(int num);
private:
BOOL IsMaskField(int field);
BOOL m_bUseMemFile;
CMFile m_mfile;
int write_file(const void *buf,int len,int size,FILE *fp);
int read_file(void *buf,int len,int size,FILE *fp);
int seek_file(FILE *fp,int pos,int mode);
void close_file(FILE *fp);
int tell_file(FILE *fp);
FILE *open_file(char *fn,char *mode);
BOOL m_bExistIndex;
protected:
char *m_fieldmask; // 无效域
};
#endif // !defined(AFX_DBFILE1_H__EC86B19E_254A_45D6_89E9_B0115D895759__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -