有谁知道怎么在一个TMemoryStream中间某个位置插入一段数据吗,原来的流分开成为目标的头尾

解决方案 »

  1.   

    copy
    copyfrom
    write
    临时流
      

  2.   

    procedure SaveToEncryptFile(FileText ,FileName :string);
    const
      LogFileID :array[0..3] of AnsiChar ='$XXX';
    var
      Instream :TStringStream;
      OutStream, OldStream :TFileStream;
      FileID :array[0..3]of char;begin
      InStream :=TStringStream.Create('');
      try
        if FileExists(FileName) then
        begin
          OldStream :=TFileStream.Create(FileName,fmOpenRead);
          try
            OldStream.Read(FileID,SizeOf(FileID));
            OldStream.Position :=SizeOf(FileID);
            if FileID=LogFileID then
            begin
               AeszDecode(OldStream,Instream);
               Instream.Position :=Instream.Size;
               Instream.WriteString(sLineBreak);
            end;
          finally
            OldStream.Free;
          end;
        end;
        Instream.Position :=Instream.Size;
        Instream.WriteString('-- -------------------------'+sLineBreak);
        Instream.WriteString('-- '+FormatDateTime('YYYY-MM-DD hh:mm:ss',Now,fs)+sLineBreak);
        Instream.WriteString('-- -------------------------'+sLineBreak);
        Instream.WriteString(FileText);
        Instream.Position :=0;
        OutStream :=TFileStream.Create(FileName,fmCreate);
        try
          OutStream.Write(LogFileID,SizeOf(LogFileID));
          OutStream.Position :=SizeOf(LogFileID);
          AeszEncode(InStream,OutStream);
        finally
          OutStream.Free;
        end;
      finally
        InStream.Free;
      end;
    end;
    这个是胡写的,就是执行出错了,自动将SQL放入错误日志,便于给别人支持,SQL包含很多关键逻辑,不想让人看,我加密了。原理就是:如果存在,先解密,加入日期,加入内容,保存。