Delphi 新增功能之: IOUtils 单元(7): TFile 结构的功能


本文整理自网络,侵删。

 
OUtils 单元主要就是三个结构: TDirectory、TPath、TFile, 很有用; 下面是 TFile 的功能简介.

TFile.Exists();
//判断指定的文件是否存在


TFile.Copy();
//复制文件
var
  source,dest: string;
begin
  TFile.Copy(source, dest);       {不允许覆盖同名的文件}
  TFile.Copy(source, dest, True); {将覆盖同名的文件}
end;


TFile.Move();
//移动文件
var
  source,dest: string;
begin
  TFile.Move(source, dest);
end;


TFile.Delete();
//删除文件


TFile.Replace();
//替换文件, dest 会备份在 bak, 复制 source 的内容到 dest 后, sourece 会被删除.
var
  source,dest,bak: string;
begin
  source := 'c:\temp\t1.txt';
  dest   := 'c:\temp\t2.txt';
  bak    := 'c:\temp\t3.txt';
  TFile.Replace(source, dest, bak);       {前两个文件必须存在}
  TFile.Replace(source, dest, bak, True); {忽略错误}
end;


TFile.Create();
//建立文件并返回一个和文件关联的 TFileStream, 指定文件存在则覆盖
var
  buf: array[0..1023] of Byte;
  fs: TFileStream;
begin
  {模拟一个缓冲区并填充}
  FillChar(buf, SizeOf(buf), 65);

  {使用返回的 TFileStream 写入流}
  fs := TFile.Create('c:\temp\test1.txt');
  fs.Write(buf, SizeOf(buf));
  fs.Free;

  {如果已知要写入流的大小, 可以使用第二个参数指定, 这样会快一点}
  fs := TFile.Create('c:\temp\test2.txt', SizeOf(buf));
  fs.Write(buf, SizeOf(buf));
  fs.Free;
end;


TFile.OpenWrite();
//按只写权限打开文件并返回一个和文件关联的 TFileStream
const
  buf: array[0..2] of Char = ('A', 'B', 'C');
var
  path: string;
  fs: TFileStream;
begin
  path := 'c:\temp\test.dat';    {文件要存在}
  fs := TFile.OpenWrite(path);
  fs.Seek(0, TSeekOrigin.soEnd); {把流指针移到尾部}
  fs.Write(buf, Length(buf)*SizeOf(Char));
  fs.Free;
end;


TFile.OpenRead();
//按只读权限打开文件并返回一个和文件关联的 TFileStream
var
  path: string;
  fs: TFileStream;
begin
  path := 'c:\temp\test.dat';    {文件要存在}
  fs := TFile.OpenRead(path);
  ShowMessage(IntToStr(fs.Size));
  fs.Free;
end;


TFile.Open();
//打开文件并返回一个和文件关联的 TFileStream
var
  path: string;
  fs: TFileStream;
begin
  path := 'c:\temp\test.dat';        {文件要存在}

  //重载一: 指定打开模式; 默认操作权限是 faReadWrite, 默认线程访问权限是 fsNone
  fs := TFile.Open(path, TFileMode);

  //重载二: 指定打开模式、操作权限; 默认线程访问权限是 fsNone
  fs := TFile.Open(path, TFileMode, TFileAccess);

  //重载三: 指定打开模式、操作权限和其他线程的访问权限
  fs := TFile.Open(path, TFileMode, TFileAccess, TFileShare);

{ TFileMode 打开模式:
  TFileMode.fmCreateNew    创建新文件, 如果文件已存在则将引发异常;
  TFileMode.fmCreate       创建新文件, 如果文件已存在则覆盖;
  TFileMode.fmOpen         打开现有文件, 如果该文件不存在则将引发异常;
  TFileMode.fmOpenOrCreate 打开文件, 如果文件不存在则建新文件;
  TFileMode.fmTruncate     打开现有文件并清空;
  TFileMode.fmAppend       打开现有文件并把流指针移到文件尾, 如果文件不存在创建新文件.
}
{ TFileMode 操作权限:
  TFileMode.faRead      只读;
  TFileMode.faWrite     只写;
  TFileMode.faReadWrite 可读写.
}
{ TFileShare 对其他线程的访问限制:
  TFileMode.fsNone      禁止其他线程共享;
  TFileMode.fsRead      允许其他线程读;
  TFileMode.fsWrite     允许其他线程写;
  TFileMode.fsReadWrite 允许其他线程读写.
}
end;


TFile.CreateText();
//建立文本文件, 存在则覆盖; 会返回 TStreamWriter
var
  path: string;
  sw: TStreamWriter;
begin
  path := 'c:\temp\test.txt';
  sw := TFile.CreateText(path); {使用的是 UTF8 格式}
  sw.Write(123);
  sw.Write('ABC');
  sw.Close;
end;


TFile.AppendText();
//为追加而打开文本文件, 不存在则创建; 会返回 TStreamWriter
var
  path: string;
  sw: TStreamWriter;
begin
  path := 'c:\temp\test.txt';
  sw := TFile.AppendText(path); {使用的是 UTF8 格式}
  sw.Write(123);
  sw.Write('ABC');
  sw.Close;
end;


TFile.AppendAllText();
//打开文本文件, 追加文本后关闭; 文件不存在则创建.
var
  path: string;
begin
  path := 'c:\temp\test.txt';
  TFile.AppendAllText(path, 'NewString');
  TFile.AppendAllText(path, 'NewString', TEncoding.UTF8); {可指定编码格式}
end;


TFile.OpenText();
//打开文本文件, 返回 TStreamReader.
var
  path: string;
  sr: TStreamReader;
begin
  path := 'c:\temp\test.txt';
  sr := TFile.OpenText(path); {将使用 UTF8 格式}
  ShowMessage(sr.ReadLine);
  sr.Close;
end;


TFile.WriteAllText();
//打开文本文件, 写入指定文本后关闭; 不管文件存在与否都将覆盖!
var
  path: string;
begin
  path := 'c:\temp\test.txt';
  TFile.WriteAllText(path, '123');
  TFile.WriteAllText(path, '123', TEncoding.UTF8); {可指定编码格式}
end;


TFile.WriteAllLines();
//打开文本文件, 写入指定的字符串数组后关闭; 不管文件存在与否都将覆盖!
var
  path: string;
  arr: TStringDynArray; {这定义在 Types 单元}
begin
  SetLength(arr, 2);
  arr[0] := 'AAA';
  arr[1] := 'BBB';

  path := 'c:\temp\test.txt';
  TFile.WriteAllLines(path, arr);
  TFile.WriteAllLines(path, arr, TEncoding.UTF8); {可指定编码格式}
end;


TFile.WriteAllBytes();
//打开文本文件, 写入指定的 TBytes 数组后关闭; 不管文件存在与否都将覆盖!
var
  path: string;
  bs: TBytes;
begin
  SetLength(bs, 2);
  bs[0] := 65;
  bs[1] := 66;

  path := 'c:\temp\test.txt';
  TFile.WriteAllBytes(path, bs);
end;


TFile.ReadAllText();
//打开文本文件, 全部读取字符串变量后关闭.
var
  path: string;
  str: string;
begin
  path := 'c:\temp\test.txt';
  str := TFile.ReadAllText(path);
  str := TFile.ReadAllText(path, TEncoding.UTF8); {可指定编码格式}
end;


TFile.ReadAllLines();
//打开文本文件, 全部读入到字符串数组后关闭.
var
  path: string;
  arr: TStringDynArray; {这定义在 Types 单元}
begin
  path := 'c:\temp\test.txt';
  arr := TFile.ReadAllLines(path);
  arr := TFile.ReadAllLines(path, TEncoding.UTF8); {可指定编码格式}
  ShowMessage(arr[0]);
end;


TFile.ReadAllBytes();
//打开文本文件, 全部读入到 TBytes 数组后关闭;
var
  path: string;
  bs: TBytes;
begin
  path := 'c:\temp\test.txt';
  bs := TFile.ReadAllBytes(path);
  ShowMessage(IntToStr(Length(bs)));
end;


暂时测试有问题的方法:
TFile.Encrypt(); {加密文件}
TFile.Decrypt(); {解密文件}


其他方法:
{读取和设置属性的方法前面有过例子}
TFile.GetAttributes();
TFile.SetAttributes();

{读取和设置文件的建立时间、最后写入时间、最后访问时间(分别有本地和UTC两种时间格式)}
TFile.GetCreationTime();
TFile.GetCreationTimeUtc();
TFile.GetLastAccessTime();
TFile.GetLastAccessTimeUtc();
TFile.GetLastWriteTime();
TFile.GetLastWriteTimeUtc();
TFile.SetCreationTime();
TFile.SetCreationTimeUtc();
TFile.SetLastAccessTime();
TFile.SetLastAccessTimeUtc();
TFile.SetLastWriteTime();
TFile.SetLastWriteTimeUtc();

来源:https://www.cnblogs.com/del/archive/2009/10/18/1585637.html

相关阅读 >>

Delphi new 为指针分配内存空间

Delphi 字幕下载单元subdownload.pas

Delphi xe7里面 sharedactivitycontext怎么提示错误?

Delphi 62 进制的简单实现

Delphi cannot find implementation of method formcreate 解决办法

Delphi winsock 域名获取远程服务器ip

Delphi 播放声音 采用 异步方式,比较流畅

Delphi 10.3.1 android沉浸式透明状态栏

Delphi memo 内容每n行分批处理

Delphi bytestofile

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...