当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 用DELPHI实现文件加密压缩作者:e梦缘(wnhoo)Mail:wnhoo@163.com风花雪月e梦情缘 点击下载此详细说明文件概述:在这篇文件中,讲述对单个文件的数据加密、数据压缩、自解压的实现。
 

 

    摘要: 简单介绍一下vcl消息传递 vcl除了封装了windows消息外,还有自己自定义的一些消息。windows的消息以wm_ 开头,可以参考delphi help里带的windows sdk 或msdn, 在messages.pas文件中也可以看得到. vcl的一些内部消息,一般是以cm_ cn_ cb_ 等开头的,在controls.pas文件中也可以看得到,具体的使用可以查看delphi......
 ·防止程序多次运行     »显示摘要«
    摘要:网络id:wnhoo or sos_admin网名:e梦缘mail:wnhoo@163.com风花雪月 e梦情缘 http://delphi.ur-solution.com/delphi_download/upload/33954_wnhoo.rar [dpr部分]program project1;uses forms, unit1 in unit1.pas {form1} ,windows,......


用DELPHI实现文件加密压缩
用delphi实现文件加密压缩

【程序编程相关:使用语句事件监视器调优 DB2 通用数据

【推荐阅读:利用 MSCS 创建高可用性的 DB2

作者: e梦缘 (wnhoo) 【扩展信息:DB2 通用数据库中的事务性日志记录概述

mail:wnhoo@163.com

风花雪月 e梦情缘

点击下载此详细说明文件

概述:

在这篇文件中,讲述对单个文件的数据加密.数据压缩.自解压的实现.同样,也可以实现对多个文件或文件夹的压缩,只要稍加修改便可实现.

关键字:加密压缩.zlib.流.资源文件

引 言:

在日常中,我们一定使用过winzip.winrar这样的出名的压缩软件,就是我们开发软件过程中不免要遇到数据加密.数据压缩的问题!本文中就这一技术问题展开探讨,同时感谢各位网友的技巧,在我每次面对问题要解决的时候,是你们辛苦地摸索出来的技巧总是让我豁然开朗,问题迎刃而解.本篇文章主要是运用delph的强大的流处理方面的技巧来实现的数据加密压缩,并用于实际的软件程序开发中,将我个人的心得.开发经验写出来与大家分享.

1.  系统功能

1).数据压缩

使用delphi提供的两个流类(tcompressionstream与tdecompressionstream)来完成数据的压缩与解压缩.

2).数据加密压缩

通过delphi编程中“流”的应用实现数据加密,主要采用tstream的两个派生类tfilestream.tmemorystream 来完成的;其中数据压缩部分采用1)的实现方法

3).双击压缩文件自动关联解压

通过更改注册表的实现扩展名与程序文件的关联,主要采用tregistry;并且,api函数shchangenotify实现注册效果的立即呈现.

4).可生成自解压文件

自解压的文件实现数据压缩1)与数据加密压缩2)的自动解压;并且,通过资源文件的使用实现可执行的自解压文件与数据文件的合并,来完成数据的自解压实现.

2.  系统实现

2.1.工作原理

2.2.关键技术的讲述

(一)zlib

1).基类 tcustomzlibstream:是类tcompressionstream与tdecompressionstream 类的基类,它主要有一个属性: onprogress,在类进行压缩或解压缩的过程中会发生这个的事件 .

格式:procedure onprogress (sender: tobject); dynamic;

2).压缩类tcompressionstream:除了继承了基类的onprogress 属性外,又增加了一个属性:compressionrate,它的定义如下:

property compressionrate: single read getcompressionrate;

通过这个属性,可以得到压缩比.

它的几个重要的方法定义如下:

constructor tcompressionstream.create (compressionlevel: tcompressionlevel; dest: tstream);

其中:tcompressionlevel(压缩类型),它由如下几个定义:

   1). clnone :不进行数据压缩;

   2). clfastest:进行快速压缩,牺牲压缩效率;

   3). cldefault:进行正常压缩;

   4). clmax: 进行最大化压缩,牺牲速度;

dest:目的流,用于存放压缩过的数据.

function tcompressionstream.write (const buffer; count: longint): longint;

其中:buffer:需要压缩的数据;

   count: 需要压缩的数据的字节数;

函数返回写入流的字节数.

注意:压缩类tcompressionstream的数据只能是写入的,如果试图从其内部读取数据,将发生一个"error "异常.需要压缩的数据通过方法 write写入流中,在写入的过程中就被压缩,并保存在由构造函数提供的内存流(tmemorystream)中,同时触发 onprocess 事件.

3). 解压缩类 tdecompressionstream :与压缩类tcompressionstream相反,它的数据是只能读出的,如果试图往其内部写数据,将发生一个"error "异常.

它的几个重要方法定义如下:

构造函数:constructor create(source: tstream);

  其中:source 是保存着压缩数据的流;

function read(var buffer; count: longint): longint;

  数据读出函数,buffer: 存数据缓冲区;count: 缓冲区的大小;

  函数返回读出的字节数.数据在读出的过程中,数据被解压缩,并触发 onprocess 事件.

(二)流

在delphi中,所有流对象的基类为tstream类,其中定义了所有流的共同属性与方法.

tstream类中定义的属性如下:

1).size:此属性以字节返回流中数据大小.

2).position:此属性控制流中存取指针的位置.

tstream中定义的虚方法有四个:

1).read:此方法实现将数据从流中读出,返回值为实际读出的字节数,它可以小于或等于指定的值.

2).write:此方法实现将数据写入流中,返回值为实际写入流中的字节数.

3).seek:此方法实现流中读取指针的移动,返回值为移动后指针的位置.

函数原形为:function seek(offset:longint;origint:word):longint;virtual;abstract;


...   下一页
 ·数字随机排序     »显示摘要«
    摘要:假设有一组数字 1~1000,请将它们随机填充在一个数组中要求:1、数组中无重复数字2、整个程式运算很快! william 兄解答var nums: array[1..1000] of integer; i,j,k,temp: integer; begin for i := low(nums) to high(nums) do nums[i] := i; for i := ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE