请大家帮我一些,我急需要解决这个小问题
我在vc编程中,开始用二进制文件写数据(包括CString 类型的字符串数据),用的是
fwrite(&vari,4,1,fp)语句,然后以后我要用到该文件中的数据时,再读出该数据,其中读出的字符串总是不对,我用的语句是:fread(&vari,4,1,fp),不知是什么缘故,特别是我还想把该二进制文件随时追加数据,我用的是fp=fopen("tt","wb"),追加之后,再打开该文件后,读取的字符串数据也不对,请知道,能否帮我解决这个问题?不胜感激!
问题点数:0、回复次数:4Top
1 楼steedhorse(晨星)回复于 2003-09-03 12:39:44 得分 0
不要使用fwrite,fread读写类中的数据,你明白CString的结构吗?可能他本身并不包含字符串数据本身,而知是包含一个指向存储字符串的缓冲区地址。还有,CString对象中还有个虚函数表指针,它怎么可以直接保存到文件中,然后下次再读出呢?
你的做法是语言C语言中针对struct的,C++中的类和struct比C里的struct复杂得多,所以不要这么用。Top
2 楼steedhorse(晨星)回复于 2003-09-03 12:41:33 得分 0
纠正:其实C中的struct也不是都可以这样,比如说struct中含有指针变量的话,使用fwrite、fread读写就非常不妥。Top
3 楼gtz(风之痕)回复于 2003-09-03 12:47:17 得分 0
真的很谢谢你!因为我用vc编程主要是写算法的,我就是对fwrite和fread比较熟悉,我是直接定义了一个字符串变量,然后把该变量写入文件中,然后再打开文件,读出该文件位置处的值。如果你有其他更好的办法,能否告知!
Top
4 楼gtz(风之痕)回复于 2003-09-03 12:57:53 得分 0
这段程序是这样的;
////写数据////////////////////////
CString cProjName = _T("test");
CString cProjLoc = _T("e:\\tt\\");
CFile File;
if (IDfile == FALSE)
{
CreateDirectory(_T("c:\\SeisOP"),NULL);
File.Open( "c:\\SeisOP\\SeisOP.sys",CFile::modeCreate|CFile::modeWrite, NULL);
File.SeekToBegin();
File.Write(&cProjName,4);
File.Write(&cProjLoc,4);
}
File.Close();
CString cProjName;
CFile file;
file.Open( "c:\\SeisOP\\SeisOP.sys",CFile::modeRead|CFile::shareExclusive , NULL );
file.SeekToBegin();
for (int i = 0; i< nProjNms; i++)
{
file.Read(&cProjName,4);
file.Seek(4,CFile::current);
cProjName = _T("");
}
file.Close();
Top




