初学者问题 CString无法保存 我有个类,里面有个变量是用来记录一段文字,用了CString类型。我用CFILE.WRITE来保存,然后READ出来后,这段文字就读不出来。我估计是CString只是一个指针,没将实际内容保存进去。请高手想个方法解决,谢谢!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 virtual void Write( const void* lpBuf, UINT nCount );//example for CFile::Writeextern CFile cfile;char pbuf[100];cfile.Write( pbuf, 100 ); 这个问题很简单CString里面不是有一个GetBuffer()函数嘛,是得到该字符串的缓冲区指针的你用这个方法就可以实现了CString str;CFile file;file.Open("c:\\1.txt",CFile::modeRead);file.Read(str.GetBuffer(str.GetLength()),512);file.Close(); 对了,你要做的是Write,就将我写的file.Read改成file.Write就全OK了 class A{public: int a; int b; CString text;};保存的代码CFile file;file.Write(aaa,sizeof(A));//aaa是A的对象,已经初始化了无论我text里存什么文本,sizeof都一样大小,所以我认为估计是存了指针而已,没把实际内容存进去。请高手指点 CString strData;CFile.Write(strData.GetBuffer(strData.GetLength()),strData.GetLength()); sizeof(A);//当然不行了,因为类型只占用了一个声明的地址,你给成员赋值并不往类里写而是往实例化的对象里边写内容sizeof(aaa);不行吗? sizeof(aaa)也不行,还sizeof(a)一样。前面夏乾坤说的可以读到原来保存的内容,但保存进类的CString变量,又出现问题。CFile file;CString str;file.read(str.getbuffer(str.getlength()),512);A *aaa= new A();file.read(aaa,sizeof(A));//直接这样text是保存不进去的aaa.text = str;//这里好象一直有问题各位 看看有什么好的建议,谢谢 class A{public: int a; int b; CString text;};//保存的代码CFile file;file.Write(&(aaa.a),sizeof(int));file.Write(&(aaa.b),sizeof(int));int nLen = aaa.text.GetLength();file.Write(&nLen,sizeof(int));file.Write(aaa.text.GetBuffer(0),aaa.text.GetLength());file.Close();//读取的代码CFile file;AAA aaa;file.Read(&(aaa.a),sizeof(int));file.Read(&(aaa.b),sizeof(int));int nLen = 0;file.Read(&nLen,sizeof(int));char *pBuf = new char[nLen+1];memset(pBuf,0,nLen+1);file.Read(pBuf,nLen);aaa.text.Format("%s",pBuf); //以下代码仅供参考#deinf MAX_LENGTH 256struct MyData{ int a; int b; char text[MAX_LENGTH];}//设置MyData myData;memset(&myData,0,sizeof(MyData));myData.a = 2005;myData.b = 317;CString szText("Text");strcpy(myData.text,szText.GetBuffer(0));//保存CFile file;file.Open(...);file.Write(&myData,sizeof(myData));file.Close();//读取MyData myData;CFile file;file.Open(...);file.Read(&myData,sizeof(myData));file.Close(); 用mfc中的Cstring为何就不用mfc中的序列化呢(Serialize) sizeof(A)=????CString类型的对象的长度随着输入的字符变化而变化,况且其长度也不一定就等于输入的字符长。象int,float是可以用sizeof的,因为int a;a就占4个字节;CFile file;file.write(aaa.a,sizeof(int));file.write(aaa.b,sizeof(int));file.write(aaa.text,aaa.text.GetLength()); CString m_strPathIndex,st; st = "123"; m_strPathIndex = "E:\\Crystal521\\1.txt"; CStdioFile file(m_strPathIndex,CFile::modeCreate|CFile::modeReadWrite|CFile::modeNoTruncate); //file.SeekToBegin(); file.Write(st,st.GetLength()); file.Flush(); file.Close(); VC++6写DLL时,使用__stdcall出错,求指点 VC 怎样获得执行文件所在路径 编程:估算未知曲线上离散点的斜率 我公司招VC程序员、ASP程序员 我有一个问题请指教! 有谁会用MoveFileEx()?解决后立即给分(关于重启计算机后,指定文件不删除的问题) 请教 [求助]如何使用两个图象列表 请问如何判断CString类型的变量是不是表示一个文件夹那??? 有没有可能让对话框中的控件是处于相对位置 :)请问大侠。tcp/ip能不能控制下一个数据包的发送时间。 如何恢复已关闭的VC++观察窗口(Watch)
//example for CFile::Write
extern CFile cfile;
char pbuf[100];
cfile.Write( pbuf, 100 );
CString里面不是有一个GetBuffer()函数嘛,是得到该字符串的缓冲区指针的
你用这个方法就可以实现了CString str;
CFile file;
file.Open("c:\\1.txt",CFile::modeRead);
file.Read(str.GetBuffer(str.GetLength()),512);
file.Close();
{
public:
int a;
int b;
CString text;
};
保存的代码
CFile file;
file.Write(aaa,sizeof(A));//aaa是A的对象,已经初始化了无论我text里存什么文本,sizeof都一样大小,所以我认为估计是存了指针而已,没把实际内容存进去。
请高手指点
CFile.Write(strData.GetBuffer(strData.GetLength()),strData.GetLength());
前面夏乾坤说的可以读到原来保存的内容,但保存进类的CString变量,又出现问题。
CFile file;
CString str;
file.read(str.getbuffer(str.getlength()),512);
A *aaa= new A();
file.read(aaa,sizeof(A));//直接这样text是保存不进去的
aaa.text = str;//这里好象一直有问题
各位 看看有什么好的建议,谢谢
{
public:
int a;
int b;
CString text;
};
//保存的代码
CFile file;
file.Write(&(aaa.a),sizeof(int));
file.Write(&(aaa.b),sizeof(int));
int nLen = aaa.text.GetLength();
file.Write(&nLen,sizeof(int));
file.Write(aaa.text.GetBuffer(0),aaa.text.GetLength());
file.Close();
//读取的代码
CFile file;
AAA aaa;
file.Read(&(aaa.a),sizeof(int));
file.Read(&(aaa.b),sizeof(int));
int nLen = 0;
file.Read(&nLen,sizeof(int));
char *pBuf = new char[nLen+1];
memset(pBuf,0,nLen+1);
file.Read(pBuf,nLen);
aaa.text.Format("%s",pBuf);
#deinf MAX_LENGTH 256
struct MyData{
int a;
int b;
char text[MAX_LENGTH];
}
//设置
MyData myData;
memset(&myData,0,sizeof(MyData));
myData.a = 2005;
myData.b = 317;
CString szText("Text");
strcpy(myData.text,szText.GetBuffer(0));
//保存
CFile file;
file.Open(...);
file.Write(&myData,sizeof(myData));
file.Close();
//读取
MyData myData;
CFile file;
file.Open(...);
file.Read(&myData,sizeof(myData));
file.Close();
为何就不用mfc中的序列化呢(Serialize)
CString类型的对象的长度随着输入的字符变化而变化,况且其长度也不一定就等于输入的字符长。
象int,float是可以用sizeof的,因为int a;a就占4个字节;CFile file;
file.write(aaa.a,sizeof(int));
file.write(aaa.b,sizeof(int));
file.write(aaa.text,aaa.text.GetLength());
st = "123";
m_strPathIndex = "E:\\Crystal521\\1.txt";
CStdioFile file(m_strPathIndex,CFile::modeCreate|CFile::modeReadWrite|CFile::modeNoTruncate);
//file.SeekToBegin();
file.Write(st,st.GetLength());
file.Flush();
file.Close();