IOUtils 單元主要就是三個結構: 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 Char;
size: Integer;
fs: TFileStream;
begin
{模擬一個緩沖區並填充}
size := Length(buf) * SizeOf(Char);
FillChar(buf, size, 65); {填充字母 A}
{使用返回的 TFileStream 寫入流}
fs := TFile.Create('c:\temp\test1.dat');
fs.Write(buf, Length(buf) * SizeOf(Char));
fs.Free;
{如果已知要寫入流的大小, 可以使用第二個參數指定, 這樣會快一點}
fs := TFile.Create('c:\temp\test2.dat', size);
fs.Write(buf, Length(buf) * SizeOf(Char));
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();