关于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.   

    可能与string类型事实上是个结构类型有关。
    尝试一下将string转换成PChar类型,然后在Write。
      

  2.   

    Src:=TmemoryStream.Create;
    Src.Write(str,length(str));//这样好象不对Src.Write(pchar(str)^,length(str));
      

  3.   

    写是写进取了,可是读出来咋整呢?
    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;
    不行
      

  4.   

    ......
    .........
    .......  aStream.Position:=0;                 //加上这句,到流的起始位置。
      aStream.Read(pbuf^,astream.size);  //
      ShowMessage(pbuf);                 //这两处你贴上来的代码应该这样写。  aStream.Free;
      dispose(pbuf);
    end;