导航
  • 主页
  • VC/MVC基础类
  • .NET 技术
  • VC/MFC界面
  • VC/MFC 进程
  • VC/MFC 数据库
  • VC/MFC&Web
  • Doc/View
  • VC++技术资源

有关CFile类读写文件的问题(HELP!SOS!)

greenhornet 2004-04-12 10:20:03
typedef struct Table
{
int ID;
CString Name;
int FieldsNumber;
Table * pTable;
}TableList;
TableList *headT,*pT,*rT;//表头指针,当前指针,表尾指针
在内存中经过前几步操作,已经建立了一个链表,每个节点都是TableList型的,现在我要将其写入文件,还要将其从文件中顺序读出,并且要重新形成一个链表,请问我该怎么办呢?多谢了!
...全文
49 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kmlin 2004-04-13
重新定义结构体:
typedef struct Table
{
int ID;
int NameLen;
CString Name;
int FieldsNumber;
Table * pTable;
}TableList;
其中NameLen = Name.Getlength();
然后,把ID,NameLen,FieldsNumber,Name的值写入一个buffer,(使用sprintf函数)
按照一个结构体一行写入文件即可。
读时同理(使用sscanf函数)。
回复
greenhornet 2004-04-13
这个是写文件的程序,大家帮忙看看吧,哪里出了错误啊?
void CMyDBMSView::OnMenuDdlSaveTable()
{
// TODO: Add your command handler code here
CFileDialog TSdlg(FALSE,"tbl","*.tbl");
if(TSdlg.DoModal ()==IDOK)
{
CFile TSfile;
VERIFY(TSfile.Open (TSdlg.GetPathName (),CFile::modeWrite|CFile::modeCreate));
TableList *ptrST;
ptrST=g_headT;
int IntTIDLength;
int IntTNLength;
int IntTFNLength;
CString TID;//Table ID
CString TFN;//Table FieldsNumber
while (ptrST!=NULL)
{
IntTIDLength=sizeof(ptrST->ID )+1;
TSfile.Write (&IntTIDLength,sizeof(IntTIDLength));
TID.Format ("%d",ptrST->ID );
TSfile.Write (TID ,IntTIDLength);
IntTNLength=ptrST->Name.GetLength ()+1;
TSfile.Write (&IntTNLength,sizeof(IntTNLength));
TSfile.Write (ptrST->Name ,IntTNLength);
IntTFNLength=sizeof(ptrST->FieldsNumber )+1;
TSfile.Write (&IntTFNLength,sizeof(IntTFNLength));
TFN.Format ("%d",ptrST->FieldsNumber );
TSfile.Write (TFN ,IntTNLength);
ptrST=ptrST->pTable ;
}
TSfile.Close ();
MessageBox("数据表文件成功保存!");
}
}
回复
greenhornet 2004-04-13
这是读文件的程序,然后将其链接成链表,但是只能顺利的读出第一个结点,第二个结点读出的内容就不正常了,为什么呢?
void CMyDBMSView::OnMenuDdlOpenTable()
{
// TODO: Add your command handler code here
CFileDialog Tdlg(TRUE,"tbl","*.tbl");
if(Tdlg.DoModal ()==IDOK)
{
CFile Tfile;
VERIFY(Tfile.Open (Tdlg.GetPathName (),CFile::modeRead));
TableList * ptrRT1;
ptrRT1=new TableList;
char * pstrID;
char * pstrName;
char * pstrField;
int IntTIDLength;
int IntTNLength;
int IntFNLength;
long LongFileLength;
long TmpFileLength=0;
LongFileLength=Tfile.GetLength ();
Tfile.Seek (TmpFileLength,CFile::begin );
while(TmpFileLength<LongFileLength)
{
//begin to read the ID
Tfile.Read (&IntTIDLength,sizeof(IntTIDLength)); pstrID=new char[IntTIDLength];
Tfile.Read (pstrID,IntTIDLength);
int TID;
TID=atoi(pstrID);
ptrRT1->ID =TID;
//begin to read the name
Tfile.Read (&IntTNLength,sizeof(IntTNLength)); pstrName=new char[IntTNLength];
Tfile.Read (pstrName,IntTNLength);
ptrRT1->Name =pstrName;
//begin to read the length
Tfile.Read (&IntFNLength,sizeof(IntFNLength)); pstrField=new char[IntFNLength];
Tfile.Read (pstrField,IntFNLength);
int TFN;
TFN=atoi(pstrField);
ptrRT1->FieldsNumber =TFN;
//end of get values to node
//begin to link the tablelist;
if(headT==NULL)
headT=ptrRT1;
else
rT->pTable =ptrRT1;
rT=ptrRT1;
if(rT!=NULL)
rT->pTable =NULL;
g_headT=headT;
ptrRT1=NULL;
ptrRT1=new TableList;
TmpFileLength=Tfile.GetPosition ();
}
Tfile.Close ();
}
}
回复
greenhornet 2004-04-12
要是用CFile的write和read要怎么能够实现呢?大侠们帮个忙吧
回复
你可以仿照MFC的对象序列化,不过可以直接顺序存入,再取出
回复
对象序列化麻,按顺序做就好了
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告