• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Delphi如何处理不同类型的文件

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

参考:http://www.cnblogs.com/railgunman/articles/1800318.html

  程序设计当中,我们时常遇到需要处理文件、目录及驱动器的情况,这里将对如何处理不同类型的文件进行讲述

   主要包括如何使用 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;

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[Matlab][Digital Processing]基本语法 - HuisClos发布时间:2022-07-18
下一篇:
MATLAB 函数求导 用法以及实例发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap