你想要什么级别的?什么用途?我有个非常简单的对filestream  write重载。写文件时可‘加加密’你要吗?

解决方案 »

  1.   


    用这个文件流类独写文件就行。文件内容是乱的。
    可以试着改加密字符。
    unit Encrypt;interface
       uses
        classes;type
      TEncryptStream = class (TFileStream)
      private
        FKey: Char;
      public
        constructor Create(const FileName: string; Mode: Word);
        function Read(var Buffer; Count: Longint): Longint; override;
        function Write(const Buffer; Count: Longint): Longint; override;
        property Key: Char read FKey write FKey default 'a';
      end;
    implementation{ TEncryptStream }constructor TEncryptStream.Create(const FileName: string; Mode: Word);
    begin
      inherited Create (FileName, Mode);
      FKey := 'a';
    end;function TEncryptStream.Read(var Buffer; Count: Integer): Longint;
    var
      pBuf, pEnc: PChar;
      I, CountRead, EncVal: Integer;
    begin
      GetMem (pEnc, Count);
      try
        CountRead := inherited Read (pEnc^, Count);
        pBuf := PChar (@Buffer);
        for I := 0 to CountRead - 1 do
        begin
          EncVal := ( Ord (pEnc[I]) - Ord(Key) ) mod 256;
          pBuf [I] := Chr (EncVal);
        end;
      finally
        FreeMem (pEnc, Count);
      end;
      Result := CountRead;
    end;function TEncryptStream.Write(const Buffer; Count: Integer): Longint;
    var
      pBuf, pEnc: PChar;
      I, EncVal: Integer;
    begin
      GetMem (pEnc, Count);
      try
        pBuf := PChar (@Buffer);
        for I := 0 to Count - 1 do
        begin
          EncVal := ( Ord (pBuf[I]) + Ord(Key) ) mod 256;
          pEnc [I] := Chr (EncVal);
        end;
        Result := inherited Write (pEnc^, Count);
      finally
        FreeMem (pEnc, Count);
      end;
    end;end.
      

  2.   

    要是明儿试了,成了的话,一定给Laza奖励的。
    Thank you!
      

  3.   

    To Laza:给个你的加解密类用法的例程如何?谢谢!
      

  4.   

    To laza:(1)请你说明一下各个参数的意义
             (2)如何给这些输入参数赋值以及如何设置输出参数的缓冲区大小等??????
      问题多多,请你不要心烦呀!如果你解决了这些问题,我一定给你加分的(>10)
      

  5.   


    我现写了一个,时间比较仓促。你应该多看看帮助。Implementation
      uses Encrypt;//引用加密流单元,可使用加密流类。
    ...//Write Block; 写文件。文件名应存在,创建文件看帮助,TFileStream 帮助
    var
      qFileStream: TEncryptStream;
      buffer: string;
    begin
      qFileStream := TEncryptStream.Create('Test.txt', fmOpenWrite);//这里用打开写方式。可设其他常量值看帮助。
      qFileStream.Seek(0, sofromEnd);
      Buffer := 'I here add a string';//写入文件的字符串
      qFileStream.Write(Buffer[1], Length(Buffer));//缓冲区首址 AND 写入个数。
      //qFileStream.Write(Pchar(Buffer)^, Length(Buffer));这样也行
      qFileStream.Free;//别忘了释放
    end;//read
    var
      qFileStream: TEncryptStream;
      buffer: string;
      qFileSize: Integer;
    begin
      qFileStream := TEncryptStream.Create('Test.txt', fmOpenRead);
      qFileSize := qFileStream.Seek(0, sofromEnd);
      SetLength(Buffer, qFileSize);//设置你要读的字符个数。
      qFileStream.Seek(0, SoFromBeginning);
      qFileStream.Read(Pchar(Buffer)^, qFileSize);
      qFileStream.Free;
      Memo1.Text := Buffer;
    end;
      

  6.   

    To laza前辈: Thank you.