RT。
我做了一个SQL脚本加密工具,可是加密出来的密文有些字符是memo控件显示不了的
所以我将密文保存到硬盘的文件里
密文中有一些是对中文字符的加密密文数据量平均在10k~20k左右
我目前用的是TFileStream,可是它的大小有限制,9K以下吧(具体多大也没试过)请问还有其它的文件类型么?
能够保存得了密文就行。

解决方案 »

  1.   

    TFileStream,随便操作个一两个GB的文件不存在问题.
      

  2.   

    20k左右的数据,也叫大量数据?TFileStream的Size,是DWORD,相当于unsigned long,64位无符号整数,可处理4294967295字节,相当于4G的文件!
      

  3.   

    对啊, TStreamFile 操作很大数据没有问题
      

  4.   


    额,莫非是我设置错了
    僵哥,能给些例子代码么?我用的是writebuffer。大小有限
      

  5.   

    var
      F: TFileStream;
      Buffer: PAnsiChar;
      BufferLen: Integer;
    begin
      BufferLen := 10 * 1024 * 1024; //10MB
      GetMem(Buffer, BufferLen);
      try
        FillChar(Buffer^, BufferLen, 65);//用字符A填充
        F := TFileStream.Create('c:\test.dat', fmCreate);
        try
          F.WriteBuffer(Buffer^, BufferLen);
        finally
          F.Free;
        end;
      finally
        FreeMem(Buffer);
      end;
    end;
      

  6.   


    3Q
    还想问个问题var
      FS: TFileStream;
    begin
      FS:=TFileStream.Create(path + 'Encode.dat', fmOpenWrite or fmCreate);
      try
        FS.Write(strEncoded,SizeOf(strEncoded));
      finally
        FS.Free;
      end;
    end;strEncoded是保存了加密后的密文,然后我这里调用write方法时为什么sizeof(strEncoded)结果是4?
    我看了strEncoded里保存的内容是比较多的,sizeof结果怎么跟指针大小一样呢??
      

  7.   

    没有多^_^var
      FS: TFileStream;
    begin
      FS:=TFileStream.Create(path + 'Encode.dat', fmOpenWrite or fmCreate);
      try
        if Length(strEncoded) > 0 then FS.Write(strEncoded[1],Length(strEncoded));
      finally
        FS.Free;
      end;
    end;
      

  8.   


    嗯嗯,确实没有多
    那僵哥,我如果要将数据从保存的encode.dat文件中读入一个字符串,应该如何操作??
    最后一个问题了哈,解决了马上给分,呵呵
      

  9.   

    var 
      FS: TFileStream; 
      strEncoded: String;
    begin 
      FS:=TFileStream.Create(path + 'Encode.dat', fmOpenRead); 
      try
        SetLength(strEncoded, FS.Size); 
        FS.ReadBuffer(strEncoded[1],Length(strEncoded)); 
      finally 
        FS.Free; 
      end; 
    end;