Delphi如何处理不同类型的文件
2015-03-30 18:41
579 查看
参考:http://www.cnblogs.com/railgunman/articles/1800318.html
程序设计当中,我们时常遇到需要处理文件、目录及驱动器的情况,这里将对如何处理不同类型的文件进行讲述
主要包括如何使用 TFileStream 类封装文件的输入/输出以及如何利用 32 位windows的主要特征——内存映射文件。将会学到如何创建一个封装内存映射文件功能的 TMemoryMappedFile类,并用它在文本文件中进行文本查询。还提供了一些关于选择驱动器、在树形目录中查询文件以及获取文件版本信息的方法。使你对文件、目录及驱动器有深入的认识。
处理文件的输入/输出
你将要对三种文件进行处理:文本文件、类型文件、二进制文件
以下几节是关于文件输入/输出的讲解。文本文件是指可被任意文本编辑器读取的ASCII文本。类型文件指包含有程序员定义的数据类型的文件。二进制文件包含其他所有的类型,它是对包含任意格式或无格式数据的文件的统称
文本文件的处理
本文讲述使用内建于 Object Pascal运行时库中的过程和函数处理文本文件的方法。在对文本文件进行任何处理之前,首先要打开此文本文件。声明变量:通过此变量可以引用一个文本文件。
打开一个文件需要两步:首先是 AssignFile(),它可以将文件变量与一个文件关联起来。接着进行第二步:打开文件。有三种方法打开文件:使用 ReWrite()过程创建并打开文件,对于一个已经存在的文件,此操作将使得文件被覆盖;使用Reset()过程只读地打开一个文件;使用Append()过程向已经存在的文件追加文本。
注意Reset()将以可读写方式打开类型文件和无类型文件。可以使用 CloseFile()来关闭一个已经打开的文件
文件的打开和关闭
后面的三个文件主要提供系统内部使用,在文件复制的编程过程中也往往会用到。它们操作的对象时文件句柄,而不是文件变量
文件定位
还有一个问题,如何判断文件已打开?要不要读写完成之后就关闭文件,下次读或写时再打开?
用 TFileStream
对于通过 Byte 数组进行文件操作的,在 FTP中经常会使用到,我也是在Delphi调用Web Service进行文件的上传和下载时找到这两个函数的,挺好用的,推荐给大家。(申明:非本人所写)
<1>将Byte数组生成文件
<2>将文件生成Byte数组
程序设计当中,我们时常遇到需要处理文件、目录及驱动器的情况,这里将对如何处理不同类型的文件进行讲述
主要包括如何使用 TFileStream 类封装文件的输入/输出以及如何利用 32 位windows的主要特征——内存映射文件。将会学到如何创建一个封装内存映射文件功能的 TMemoryMappedFile类,并用它在文本文件中进行文本查询。还提供了一些关于选择驱动器、在树形目录中查询文件以及获取文件版本信息的方法。使你对文件、目录及驱动器有深入的认识。
处理文件的输入/输出
你将要对三种文件进行处理:文本文件、类型文件、二进制文件
以下几节是关于文件输入/输出的讲解。文本文件是指可被任意文本编辑器读取的ASCII文本。类型文件指包含有程序员定义的数据类型的文件。二进制文件包含其他所有的类型,它是对包含任意格式或无格式数据的文件的统称
文本文件的处理
本文讲述使用内建于 Object Pascal运行时库中的过程和函数处理文本文件的方法。在对文本文件进行任何处理之前,首先要打开此文本文件。声明变量:通过此变量可以引用一个文本文件。
打开一个文件需要两步:首先是 AssignFile(),它可以将文件变量与一个文件关联起来。接着进行第二步:打开文件。有三种方法打开文件:使用 ReWrite()过程创建并打开文件,对于一个已经存在的文件,此操作将使得文件被覆盖;使用Reset()过程只读地打开一个文件;使用Append()过程向已经存在的文件追加文本。
注意Reset()将以可读写方式打开类型文件和无类型文件。可以使用 CloseFile()来关闭一个已经打开的文件
文件的打开和关闭
AssignFile | 把一个外部文件名和一个文件变量相关联 |
Reset | 打开一个存在的文件,文本文件(只读),其他文件(读写) |
ReWrite | 创建并打开一个新文件(或者覆盖已有的文件) |
Append | 以追加方式打开一个文件(只适用于文本文件) |
CloseFile | 关闭一个打开的文件 |
FileOpen | 打开一个特定的文件并返回文件句柄 |
FileCreate | 创建一个给定文件名的文件,并返回文件句柄 |
FileClose | 关闭一个特定句柄的文件 |
文件定位
Seek | 把文件当前位置移至指定部分 |
FilePos | 返回文件当前的位置 |
Eoln | 返回行结束标志 |
EOF | 返回文件结束标志 |
FileSeek | 改变当前文件指针的位置 |
用 TFileStream
对于通过 Byte 数组进行文件操作的,在 FTP中经常会使用到,我也是在Delphi调用Web Service进行文件的上传和下载时找到这两个函数的,挺好用的,推荐给大家。(申明:非本人所写)
<1>将Byte数组生成文件
procedure ByteArrayToFile(Const ByteArray : TByteDynArray; Const FileName : String); var Conut : Integer; F : File of Byte; pTemp : Pointer; begin AssignFile(F, FileName); ReWrite(F); try Count := Length(ByteArray); pTemp := @ByteArray[0]; BlockWrite(F, pTemp^, Count); finally CloseFile(F); end; end;
<2>将文件生成Byte数组
function FileToByteArray(const FileName : String) :TButeBtnArray; const BLOCK_SIZE = 1024; var BytesRead, BytesToWrite, Count :Integer; F :Filw of Byte; pTemp : Pointer; begin AssignFile(F, FileName); Reset(F); try Count := FileSize(F); SetLength(Result, Count); pTemp := @Result[0]; BytesRead := BLOCK_SIZE; while(BytesRead = BLOCK_SIZE) do begin BytesToWrite := Min(Count, BLOCK_SIZE); BlockRead(F, pTemp^, BytesToWrite, BytesRead); pTemp := Pointer(LongInt(pTemp)+BLOCK_SIZE); Count := Count-BytesRead; end; finally CloseFile(F); end; end;
function Encrypt(mStr : String; mKey : String) :String; var I, J :Integer; begin J:=1; Result := ''; for I:=1 to Length(mStr) do begin Result := Result + Char(Ord(mStr[I] xor Ord(mKey[j])); if J + 1 <= Length(mKey) then Inc(J) else J:=1; end; {自己加步骤} end;
function Decrypt(mStr : String; mKey : String) :String; var I,J: Integer; begin J :=1; Result := ''; {自己加步骤} for I :=1 to Length(mStr) do begin Result := Result + Char(Ord(mStr[I] xor Ord(mKey[J])); if J+1 <= Length(mKey) then; Inc(J) else J:=1; end; end;
procedure TForm1.Button1Click(Sender : TObject); const cKey1 = '谁想试试怎么破'; cKey2 = '我可不愿意这样玩(1)我可不愿意这样玩(2)我可不愿意这样玩(3)'; cKey3 = 'Memo2.Text := Decrypt(Encrypt(Memo1.Text, cKey), cKey);'; var S :String; //加密后的字符 begin S := Encrypt(Encrypt(Encrypt(Memo1.Text, cKey1), cKey2), cKey3); ShowMessage(S); Memo2.Text := Decrypt(Decrypt(Decrypt(S, cKey3), cKey2), cKey1); end;
相关文章推荐
- Delphi如何处理不同类型的文件
- IIS如何增加处理不同的文件扩展名(MIME类型)?
- SQL2005-SSIS 对同一个文件中的不同行类型做不同处理
- 如何处理BLOB类型数据之一:上传文件并保存到BLOB中
- 如何正确使用不同类型的WSDL文件
- 在项目中如何读取不同类型的文件
- 如何处理BLOB类型数据之二:下载BLOB内容并保存到文件中
- 在xml布局文件中,我们既可以设置px,也可以设置dp(或者dip)。一般情况下,我们都会选择使用dp,这样可以保证不同屏幕分辨率的机器上布局一致。但是在代码中,如何处理呢?很多控件的方法中都只提供了
- eclipse中如何修改不同后缀文件类型的编码
- 如何在数据库中保存不同类型的文件
- 如何通过一个方法来传入并处理不同泛型类型的集合
- (转贴)(愚翁)如何在数据库中保存不同类型的文件
- delphi编程如何判断图片文件的真实类型?
- asp.net不同类型文件读取处理
- JAVA 文件上传后台判断浏览器的类型以及JDK1.5和1.6处理的不同
- 作为项目经理,如何处理好与不同类型客户之间的关系?
- Linux下如何查看分区文件系统类型
- 如何客户端控制file表单的文件类型
- J2EE AJAX(六) 如何处理复杂的返回值类型
- Delphi 2007里面如何添加Pas文件的组件,并在工具箱显示