我有一INI文件用于 TreeView 目录保存和读取,现想进行加密,希望能提供源码
我现在是TreeView自带的loadfile来读取ini文件的

解决方案 »

  1.   

    你可以在ini文件末尾添加一个其他文件,(记录添加的文件大小)
    然后loadfile的时候,只load真正的ini文件内容,而添加的文件不加载
    给你两个函数,压缩文件用的,也许能用得上:
    procedure CompressFiles(Files : TStringList; const Filename : String);
    var
      infile, outfile, tmpFile : TFileStream;
      compr : TCompressionStream;
      i,l : Integer;
      s : String;
    begin
      if Files.Count > 0 then
      begin
         outFile := TFileStream.Create(Filename,fmCreate);
         try
           { the number of files }
           l := Files.Count;
           outfile.Write(l,SizeOf(l));
           for i := 0 to Files.Count-1 do
           begin
               infile := TFileStream.Create(Files[i],fmOpenRead);
               try
                 { the original filename }
                 s := ExtractFilename(Files[i]);
                 l := Length(s);
                 outfile.Write(l,SizeOf(l));
                 outfile.Write(s[1],l);
                 { the original filesize }
                 l := infile.Size;
                 outfile.Write(l,SizeOf(l));
                 { compress and store the file temporary}
                 tmpFile := TFileStream.Create('tmp',fmCreate);
                 compr := TCompressionStream.Create(clMax,tmpfile);
                 try
                    compr.CopyFrom(infile,l);
                 finally
                    compr.Free;
                    tmpFile.Free;
                 end;
                { append the compressed file to the destination file }
                 tmpFile := TFileStream.Create('tmp',fmOpenRead);
                 try
                    outfile.CopyFrom(tmpFile,0);
                 finally
                    tmpFile.Free;
                 end;
               finally
                 infile.Free;
               end;
           end;
         finally
           outfile.Free;
         end;
         DeleteFile('tmp');
      end;
    end;procedure DecompressFiles(const Filename, DestDirectory : String);
    var
      dest,s : String;
      decompr : TDecompressionStream;
      infile, outfile : TFilestream;
      i,l,c : Integer;
    begin
      // IncludeTrailingPathDelimiter (D6/D7 only)
      dest := IncludeTrailingPathDelimiter(DestDirectory);
      infile := TFileStream.Create(Filename,fmOpenRead);
      try
        { number of files }
        infile.Read(c,SizeOf(c));
        for i := 1 to c do
        begin
          { read filename }
          infile.Read(l,SizeOf(l));
          SetLength(s,l);
          infile.Read(s[1],l);
          { read filesize }
          infile.Read(l,SizeOf(l));
          { decompress the files and store it }
          s := dest+s; //include the path
          outfile := TFileStream.Create(s,fmCreate);
          decompr := TDecompressionStream.Create(infile);
          try
            outfile.CopyFrom(decompr,l);
          finally
            outfile.Free;
            decompr.Free;
          end;
        end;
      finally
        infile.Free;
      end;
    end;