📄 viewschemafile.cpp
字号:
// ViewSchemaFile.cpp: implementation of the CViewSchemaFile class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Database.h"
#include "ViewSchemaFile.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CViewSchemaFile::CViewSchemaFile()
{
}
CViewSchemaFile::CViewSchemaFile(int hFile)
{
}
CViewSchemaFile::CViewSchemaFile(LPCTSTR lpszFileName, UINT nOpenFlags,UINT id)
:CFile(lpszFileName, nOpenFlags)
{
if(GetLength()==0)
{
SetLength(2*MAIN_BLOCK);
ID=id;
end=MAIN_BLOCK;
SeekToBegin();
Write(&ID,sizeof(UINT));
Write(&end,sizeof(UINT));
}
else
{
SeekToBegin();
Read(&ID,sizeof(UINT));
Read(&end,sizeof(UINT));
}
}
void CViewSchemaFile::Close()
{
this->SeekToBegin();
Write(&ID,sizeof(UINT));
Write(&end,sizeof(UINT));
CFile::Close();
}
BOOL CViewSchemaFile::Open(LPCTSTR lpszFilename,UINT nOpenFlags,UINT id)
{
CFile::Open(lpszFilename,nOpenFlags);
if(GetLength()==0)
{
SetLength(2*MAIN_BLOCK);
ID=id;
end=MAIN_BLOCK;
SeekToBegin();
Write(&ID,sizeof(UINT));
Write(&end,sizeof(UINT));
}
else
{
SeekToBegin();
Read(&ID,sizeof(UINT));
Read(&end,sizeof(UINT));
}
return TRUE;
}
/***********************************************************************
/* BYTE exist;
/* WORD length;
/* BYTE name_length;
/* CString name;
/* UINT RelNo1;//所属关系号
/* UINT RelNo2;
/* int time;//时间戳
/* UINT DataFileNo;
/* PDB db_addr;
/* UINT rcd_len;//辅助
/* WORD attr_num;
/************************************************************************
/* CAttribute *at;
以上写入文件*************************************************************/
CRelView * CViewSchemaFile::ReadSchema(PDB db_addr)
{
CAttribute A;
WORD i;
BYTE exist;
UINT offset=UINT(db_addr&0xFFFFFFFF);
CRelView *view=new CRelView;
char name[11];//????????????????????????????????
memset(name,0,10);
Seek(offset,CFile::begin);
Read(&exist,sizeof(BYTE));
if(!exist)
return NULL;
Read(&view->length,sizeof(WORD));
Read(&view->name_length,sizeof(BYTE));
Read(name,view->name_length);
view->name=CString(name);
Read(&view->RelNo1,sizeof(UINT));
Read(&view->RelNo2,sizeof(UINT));
Read(&view->time,sizeof(int));
Read(&view->DataFileNo,sizeof(UINT));
Read(&view->db_addr,sizeof(PDB));
Read(&view->rcd_len,sizeof(UINT));
Read(&view->attr_num,sizeof(WORD));
view->at=new CAttribute[view->attr_num+1];
for(i=1;i<=view->attr_num;i++)
{
Read(&(A.name_length),sizeof(BYTE));
Read(name,A.name_length);
A.name=CString(name);
Read(&(A.type),sizeof(BYTE));
Read(&A.idx,sizeof(BYTE));
Read(&A.unq,sizeof(BYTE));
Read(&(A.rf_relationship),sizeof(UINT));
Read(&(A.rf_Attribute),sizeof(WORD));
Read(&(A.length),sizeof(WORD));
Read(&(A.IndexMainFile),sizeof(UINT));
Read(&(A.offset),sizeof(UINT));
view->at[i]=A;
}
return view;
}
PDB CViewSchemaFile::Location(CRelView *view)//定位,定位后长度不可变
{
ASSERT(view->wtag);
PDB Ret=(PDB(ID)<<32)+PDB(end);
if((end+view->length) > GetLength())
SetLength(GetLength()+MAIN_BLOCK);
end+=view->length;
return Ret;
}
CViewSchemaFile::~CViewSchemaFile()
{
if (m_hFile != (UINT)hFileNull && m_bCloseOnDelete)
Close();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -