参考: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;

  

Delphi如何处理不同类型的文件的更多相关文章

  1. Atitit.论图片类型 垃圾文件的识别与清理  流程与设计原则 与api概要设计 v2 pbj

    Atitit.论图片类型 垃圾文件的识别与清理  流程与设计原则 与api概要设计 v2 pbj 1. 俩个问题::识别垃圾文件与清理策略1 2. 如何识别垃圾图片1 2.1. 体积过小文件<1 ...

  2. delphi项目中的modelsupport文件夹

    delphi项目中的modelsupport文件夹 今天写着写着突然发现多了一个这个文件夹..苦思不得其解  看着又难受  删了又重建 终于找到了  存此备查;Tools--option--toget ...

  3. echo "不允许上传该类型的文件

    <?php教程 // 上传设置 $maxsize=10002400;            //最大允许上传的文件大小 $alltype=array(".php"," ...

  4. Linux复制指定目录及子目录下特定类型的文件

    首先建立一个用于测试的目录,用'tree'命令查看其结构如下所示: 可见,目录中主要包含用于测试的*.txt文件和用于充当炮灰的*.tes文件 目标是保持当前的目录结构,只把txt文件复制出来 方法一 ...

  5. java读取各类型的文件

    java读取各类型的文件 用到的几个包 bcmail-jdk14-132.jar/bcprov-jdk14-132.jar/checkstyle-all-4.2.jar/FontBox-0.1.0-d ...

  6. 如何用DELPHI编程修改外部EXE文件的版本信

    右击里面有修改 点开直接修改就可以了吧. DELPHI 里程序的版本信息怎么是灰色的,无法更改 耐心读以下说明,应该能解决你的问题,如果不能解决,请Hi我~ 如何给自己的dll文件添加版本信息呢? 首 ...

  7. ArcGIS学习记录—dbf shp shx sbn sbx mdb adf等类型的文件的解释

    原文地址: ArcGIS问题:dbf shp shx sbn sbx mdb adf等类型的文件的解释 - Silent Dawn的日志 - 网易博客 http://gisman.blog.163.c ...

  8. Android 各种MIME类型和文件类型的匹配表

    MIME:全称Multipurpose Internet Mail Extensions,多功能Internet 邮件扩充服务.它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后 ...

  9. Delphi使用NativeXml访问XML文件

    Delphi使用NativeXml访问XML文件 1.创建XML文件var Doc: TNativeXml;//声明上下文对象var filepath:string;//文件路径DOC:=TNativ ...

随机推荐

  1. (转)一个JavaWeb项目开发总结

    原文地址:http://www.cnblogs.com/lzb1096101803/p/4907775.html 一.学会如何读一个JavaWeb项目源代码 步骤:表结构->web.xml-&g ...

  2. Border Tree笔记

    最近在学这个东西(当然不是行道树了QAQ..),感觉挺鬼畜的,整个人都不太好了..(特别是鬼畜的sone爷代码与讲稿),感觉他写的并不是普及向算法...?

  3. ASIO插件 真的能提升 音质?(听音乐者必看)

    最近在倒弄HIFI音乐播放器footbar2000的配置时,发现了2011年的一个神贴, 最牛逼的是,这个神贴到现在还屹立不倒,还有很多无知的人在下面膜拜, 我真的想问:你这么优秀,都能逆天反转音质, ...

  4. Git – Fast Forward 和 no fast foward

    Git 很是强大,在体验过rebase的华丽之后,再次发现之前在TFS上遇到的问题一下都有解了.但也印证了Git深入并非易事.这篇就谈下一个容易迷糊的概念:Fast forward. Fast-For ...

  5. Qt Connect 信号 槽

    信号和槽机制是 QT 的核心机制 .信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方.信号和槽是 QT 自行定义的一种通信机制,它独立于标准 ...

  6. C#操作字符串方法总结<转>

    staticvoid Main(string[] args) { string s =""; //(1)字符访问(下标访问s[i]) s ="ABCD"; Co ...

  7. 7. javacript高级程序设计- 函数表达式

    1. 函数表达式 1.1 函数定义 函数定义的方式有两种:一种是函数声明,另一种就是函数表达式. (1). 函数声明:函数声明的重要特征就是函数声明提示,函数声明会在函数执行前执行 function ...

  8. MST:Agri-Net(POJ 1258)

     Agri-Net 题目大意:农夫有一片农场,现在他要把这些田地用管子连起来,田地之间有一定距离,铺设每一段管子的长度与这些田地与田地距离是一样的,问你最小的铺设方案. 这一题很裸,Kruskal算法 ...

  9. 为Kindeditor控件添加图片自动上传功能

    Kindeditor是一款功能强大的开源在线HTML编辑器,支持所见即所得的编辑效果.它使用JavaScript编写,可以无缝地与多个不同的语言环境进行集成,如.NET.PHP.ASP.Java等.官 ...

  10. POJ 3597 Polygon Division (DP)

    题目链接 题意:把一个正多边形分成数个三角形或者四边形,问有多少种方案. 题解: 如果分出的全为三角形的话,那就是正多边形三角剖分问题.它的结果就是Catalan数.现在也可以划分出四边形的话,可以采 ...