BCB TMemoryStream
场景:用BCB操作TMemoryStream流文件解决办法
用BCB操作TMemoryStream流文件
我有一个流文件,现在在它最前面加入指定的几个字符,如:
AnsiString str;
str="pkr";
TBlobField *blob =(TBlobField *)DataModule1->ADOQuery1->FieldByName("infotext");
TMemoryStream *p=new TMemoryStream();
void *Buffer;
blob->SaveToStream(p);
p->Position=0;
p->Write(Buffer,str.Length());
p->SaveToFile(SaveDialog1->FileName);
这样就可以加入"pkr"这几个字符到流文件中了
但是我读出来的时候就要去掉"pkr"这几个字符了,才能还原infotext字段的值
void *Buffer;
TMemoryStream *p1=new TMemoryStream();//源
p1->LoadFromFile(str);str就是那个加了字符"pkr"的流文件
p1->Position=?;指针移到哪个位置
/* p2->Seek(0,soFromBeginning);
p1->Seek(0,soFromEnd);
p1->CopyFrom(p2,p2->Size);
p2->LoadFromStream(p1);*/
Memo1->LoadFromStream(p1);
求帮忙?????????????
------解决方案--------------------
你能保证str这个文件里保存的数据是正确的吗?
p->Write(Buffer,str.Length());
p->SaveToFile(SaveDialog1->FileName);
这两行代码,当Write执行以后,p的Position已经发生了变化,保存到文件以前,应该再将其归零。
------解决方案--------------------
除妖哥指出的问题外,还有问题
void *Buffer;
blob->SaveToStream(p);
p->Position=0;
p->Write(Buffer,str.Length());
//上句错误 Buffer是野指针,改为p->Write(str.c_str(),str.Length());
//你这样做只是将内存流的前几个字节改成str,这样就不能还原成原来的
//按你的要求建议在最后追加str,取出来时只需将长度设置一下就是原来的流了
p->Position=0; //保存前加上这句,要复位
p->SaveToFile(SaveDialog1->FileName);
用BCB操作TMemoryStream流文件
我有一个流文件,现在在它最前面加入指定的几个字符,如:
AnsiString str;
str="pkr";
TBlobField *blob =(TBlobField *)DataModule1->ADOQuery1->FieldByName("infotext");
TMemoryStream *p=new TMemoryStream();
void *Buffer;
blob->SaveToStream(p);
p->Position=0;
p->Write(Buffer,str.Length());
p->SaveToFile(SaveDialog1->FileName);
这样就可以加入"pkr"这几个字符到流文件中了
但是我读出来的时候就要去掉"pkr"这几个字符了,才能还原infotext字段的值
void *Buffer;
TMemoryStream *p1=new TMemoryStream();//源
p1->LoadFromFile(str);str就是那个加了字符"pkr"的流文件
p1->Position=?;指针移到哪个位置
/* p2->Seek(0,soFromBeginning);
p1->Seek(0,soFromEnd);
p1->CopyFrom(p2,p2->Size);
p2->LoadFromStream(p1);*/
Memo1->LoadFromStream(p1);
求帮忙?????????????
------解决方案--------------------
你能保证str这个文件里保存的数据是正确的吗?
p->Write(Buffer,str.Length());
p->SaveToFile(SaveDialog1->FileName);
这两行代码,当Write执行以后,p的Position已经发生了变化,保存到文件以前,应该再将其归零。
------解决方案--------------------
除妖哥指出的问题外,还有问题
void *Buffer;
blob->SaveToStream(p);
p->Position=0;
p->Write(Buffer,str.Length());
//上句错误 Buffer是野指针,改为p->Write(str.c_str(),str.Length());
//你这样做只是将内存流的前几个字节改成str,这样就不能还原成原来的
//按你的要求建议在最后追加str,取出来时只需将长度设置一下就是原来的流了
p->Position=0; //保存前加上这句,要复位
p->SaveToFile(SaveDialog1->FileName);