我不想用读写文件的方法,所以不能用TMemoryStream的Savetofile,然后再StringList.LoadFromFile取出的方法。我用一个s:TStrings,s.LoadFromStream,然后StringList.Text:=s.Text也不行。请问各位高手有什么方法?多谢。

解决方案 »

  1.   

    流转换为字符串:
    SetLength(S, Stream.Size);
    Stream.WriteBuffer(Pointer(S)^, Length(S));
      

  2.   

    ksaiy(消失在人海-喜欢昆明的花)的方法我试了,但是我的MemoryStream中存放的数据很多(200多K,又带有很多换行之类的字符),写入S的东西不全,比写到文件中少了很多。谁还有更好的方法?
      

  3.   

    #0,#10 #13换行之类的字符是不会在TStringList中存在的,所以文件中少是绝对的!
    procedure TStrings.SetTextStr(const Value: string);
    var
      P, Start: PChar;
      S: string;
    begin
      BeginUpdate;
      try
        Clear;
        P := Pointer(Value);
        if P <> nil then
          while P^ <> #0 do
          begin
            Start := P;
            while not (P^ in [#0, #10, #13]) do Inc(P);
            SetString(S, Start, P - Start);
            Add(S);
            if P^ = #13 then Inc(P);
            if P^ = #10 then Inc(P);
          end;
      finally
        EndUpdate;
      end;
    end;
      

  4.   

    我的内容是一个加密的文件,那些东西都不能去掉。文件是加密的内容,读入到一个TMemoryStream中,我想解密后保存到StringList中。有很多行,直接解密后保存到文件是正确的,我就是想不通过文件直接读到StringList中。
      

  5.   

    不懂何意,
    直接解密后是何数据还是贴点code 
    我感觉直接解密后保存到文件是正确,绝对可以直接解密存到TStringList
      

  6.   

    var
        sList:TStringList;
        MS, SS : TMemoryStream;
    begin
        sList:=TStringList.Create;
        MS := TMemoryStream.Create;
        SS := TMemoryStream.Create;    TRY
           MS.LoadFromFile('1.txt');   //读取加密的数据
           MS.Position := 0;
           SS:=Decrypt(MS);            //解密
           SS.SaveToFile('2.txt');     //这样是正确的       sList.text:=  //如何才能将SS(Stream)中的数据放到StringList中
        FINALLY
           MS.Free;
           SS.Free;
           sList.Free;
        end;代码如上,还望高手指点。
      

  7.   

    SS.Position:=0;
    slist.loadfromstream(ss)