关于TMemoryStream的文件操作的两个方式(100分)

  • 主题发起人 主题发起人 snowrain
  • 开始时间 开始时间
S

snowrain

Unregistered / Unconfirmed
GUEST, unregistred user!
关于TMemoryStream的文件操作的两个方式
我想把一个文件,比如1.bin读入到一个TMemoryStream中,
Src:=TmemoryStream.Create;
Src.LoadFromFile('C:/1.bin');
但是如果因为其他操作的原因,已经先将这个文件读到一个String中了,
现在又要将这个String写到这个TMemoryStream中,
我是这样操作的:(这里的str就是那个已经读入文件内容的string)
Src:=TmemoryStream.Create;
Src.Write(str,length(str));
但是这样写入后的TMemoryStream与直接loadfromfile的结果不一样了
请问各位老师,
1)这两种操作有什么区别?
2)将String写入TMemoryStream应该怎么做?应该注意什么?
谢谢!
 
两种操作没有什么区别,应该是你将文件读到Str时出错了.导致最终结果出错.
将全部代码贴出来看看.
 
TmemoryStream是从TStream继承下来的,TMemoryStream是内存流。
第一种方法是没问题的,第二种方法,取数据时你可以加上
src.position:=0;
因为Src.Write使指针移到了Stream末尾,所以要复位。
如果加了,那么你就试试下面的方法:
VAR
tmp:pointer;
//代码部份
tmp:=AllocMem(Length(str));
tmp:=Pchar(str);
Src.Write(tmp^,Length(str));


 
简单的做法是用tstringstream来中转,或者干脆用tstringstream来替代TMemoryStream即可。
 
Src.Write(str[1],length(str));
 
对,像楼上那样,传递指针最好!
 
请问各位老师:
Src.Write(str,length(str));

Src.Write(str[1],length(str));
有何异同?
 
请教各位老师!谢谢!
 
str 相当于 str[0]
str[1] 是str[0]后面的一个元素,地址不同
 
str 相当于 str[0]?
不对哦,str[0]对于ansi string来说是不准访问的,
我觉得str 应该与str[1]是相同的。
 
后退
顶部