关于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应该怎么做?应该注意什么?
谢谢!
我想把一个文件,比如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应该怎么做?应该注意什么?
谢谢!
尝试一下将string转换成PChar类型,然后在Write。
Src.Write(str,length(str));//这样好象不对Src.Write(pchar(str)^,length(str));
var
aStream:Tmemorystream;
aString:string;
pbuf:pchar;
begin
pBuf:=Allocmem(1024);
aStream:=TMemorystream.Create;
aString:='abcdefghi123';
//copymemory(pbuf,pchar(astring),length(astring));
//copymemory(aStream,pchar(astring),length(astring));
aStream.Write(pchar(aString)^,length(astring));
aStream.SaveToFile('d:\a.txt');
aString:='';
//
aStream.Read(pbuf,astream.size);
//copymemory(pchar(astring),pbuf,astream.size);
//showmessage(aString);
showmessage(pbuf^);
aStream.Free;
dispose(pbuf);
end;
不行
.........
....... aStream.Position:=0; //加上这句,到流的起始位置。
aStream.Read(pbuf^,astream.size); //
ShowMessage(pbuf); //这两处你贴上来的代码应该这样写。 aStream.Free;
dispose(pbuf);
end;