IOUtils 單元主要就是三個結構: TDirectory、TPath、TFile, 很有用;
(1) TDirectory的功能簡介
--------------------------------------------------------------------------------
TDirectory.CreateDirectory(); {建立新目錄}
TDirectory.Exists(); {判斷文件夾是否存在}
TDirectory.IsEmpty(); {判斷文件夾是否爲空}
TDirectory.Copy(); {複製文件夾}
TDirectory.Move(); {移動文件夾}
TDirectory.Delete(); {刪除文件夾, 第二個參數爲 True 可刪除非空文件夾}
TDirectory.GetDirectoryRoot(); {獲取目錄的根盤符, 如: C:/}
TDirectory.GetCurrentDirectory; {獲取當前目錄}
TDirectory.SetCurrentDirectory(); {設置當前目錄}
TDirectory.GetLogicalDrives; {獲取驅動器列表; 下有舉例}
TDirectory.GetAttributes(); {獲取文件夾屬性, 譬如只讀、存檔等; 下有舉例}
TDirectory.SetAttributes(); {設置文件夾屬性; 下有舉例}
{獲取、設置文件建立時間、修改時間、讀取時間}
TDirectory.GetCreationTime();
TDirectory.SetCreationTime();
TDirectory.GetLastWriteTime();
TDirectory.SetLastWriteTime();
TDirectory.GetLastAccessTime();
TDirectory.SetLastAccessTime();
{使用 Utc 時間格式讀取或設置}
TDirectory.GetCreationTimeUtc();
TDirectory.SetCreationTimeUtc();
TDirectory.GetLastWriteTimeUtc();
TDirectory.SetLastWriteTimeUtc();
TDirectory.GetLastAccessTimeUtc();
TDirectory.SetLastAccessTimeUtc();
--------------------------------------------------------------------------------
測試代碼:
--------------------------------------------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses IOUtils, Types, TypInfo;
//TDirectory.GetLogicalDrives; {獲取驅動器列表}
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
arr: TStringDynArray;
begin
arr := TDirectory.GetLogicalDrives;
Memo1.Clear;
for s in arr do Memo1.Lines.Add(s);
end;
//TDirectory.GetAttributes(); {獲取文件夾屬性, 譬如只讀、存檔等}
procedure TForm1.Button2Click(Sender: TObject);
var
fas: TFileAttributes;
fa: TFileAttribute;
begin
fas := TDirectory.GetAttributes('c:/Windows');
Memo1.Clear;
for fa := Low(TFileAttribute) to High(TFileAttribute) do
if fa in fas then Memo1.Lines.Add(GetEnumName(TypeInfo(TFileAttribute), Ord(fa)));
end;
//TDirectory.SetAttributes(); {設置文件夾屬性, 這裏是設置爲隱藏}
procedure TForm1.Button3Click(Sender: TObject);
const
path = 'c:/temp/ABC';
begin
TDirectory.CreateDirectory(path);
TDirectory.SetAttributes(path, [TFileAttribute.faHidden]);
end;
end.
--------------------------------------------------------------------------------
TDirectory.GetFileSystemEntries 用法 (可同時獲取文件與子目錄)
--------------------------------------------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses IOUtils, Types;
const path = 'C:/Program Files/Embarcadero/RAD Studio/7.0';
//獲取指定目錄下的文件與子目錄
procedure TForm1.Button1Click(Sender: TObject);
var
dfs: TStringDynArray;
str: string;
begin
dfs := TDirectory.GetFileSystemEntries(path);
Memo1.Clear;
for str in dfs do Memo1.Lines.Add(str);
end;
//獲取指定目錄下的、名稱是 L 開頭的文件與子目錄
procedure TForm1.Button2Click(Sender: TObject);
var
dfs: TStringDynArray;
str: string;
begin
dfs := TDirectory.GetFileSystemEntries(path, 'L*');
Memo1.Clear;
for str in dfs do Memo1.Lines.Add(str);
end;
//獲取指定目錄及嵌套目錄下的所有文件與子目錄
procedure TForm1.Button3Click(Sender: TObject);
var
dfs: TStringDynArray;
str: string;
begin
dfs := TDirectory.GetFileSystemEntries(path + '/source', TSearchOption.soAllDirectories, nil);
Memo1.Clear;
for str in dfs do Memo1.Lines.Add(str);
end;
//使用 TDirectory.TFilterPredicate 函數參數
procedure TForm1.Button4Click(Sender: TObject);
var
dfs: TStringDynArray;
begin
Memo1.Clear;
dfs := TDirectory.GetFileSystemEntries(path,
function(const Path: string; const SearchRec: TSearchRec): Boolean
begin
//這裏可以有更多過濾條件或其他處理
Memo1.Lines.Add(Path + '/' + SearchRec.Name);
end
);
end;
end.
--------------------------------------------------------------------------------
(2) TPath的功能簡介 (以後路徑相關的處理, 用 IOUtils.TPath 就很方便了.)
--------------------------------------------------------------------------------
//較常用的方法:
TPath.GetTempPath; {獲取臨時文件夾路徑}
TPath.GetTempFileName; {獲取一個臨時文件名}
TPath.GetPathRoot(); {提取盤符, 如: c:/}
TPath.GetDirectoryName(); {提取路徑}
TPath.GetFileName(); {提取文件名}
TPath.GetExtension(); {提取擴展名}
TPath.GetFileNameWithoutExtension(); {提取無擴展名的文件名}
TPath.ChangeExtension(); {更換擴展名}
TPath.DriveExists(); {檢查路徑中的驅動器是否存在}
TPath.GetFullPath(); {根據相對路徑給出全路徑}
TPath.HasExtension(); {判斷是否有擴展名}
TPath.IsPathRooted(); {判斷是否是絕對路徑}
TPath.Combine(); {結合路徑}
TPath.GetRandomFileName; {產生一個隨機文件名}
TPath.GetGUIDFileName(); {用於產生一個唯一的文件名, 布爾參數決定名稱中是否包含 -}
TPath.IsValidPathChar(); {判斷給定的字符是否能用於路徑名}
TPath.IsValidFileNameChar(); {判斷給定的字符是否能用於文件名}
//不常用的方法
TPath.HasValidPathChars();
TPath.HasValidFileNameChars();
TPath.GetExtendedPrefix();
TPath.IsExtendedPrefixed();
TPath.IsUNCRooted();
TPath.IsDriveRooted();
TPath.IsUNCPath();
TPath.MatchesPattern();
TPath.GetInvalidFileNameChars;
TPath.GetInvalidPathChars;
TPath.GetAttributes();
TPath.SetAttributes();
//屬性, 獲取在不同平臺下的各種路徑分隔符, 都是隻讀的.
TPath.AltDirectorySeparatorChar; {Windows 下是 "/"}
TPath.AltDirectorySeparatorChar; {Windows 下是 "/"}
TPath.ExtensionSeparatorChar; {Windows 下是 "."}
TPath.PathSeparator; {Windows 下是 ";"}
TPath.VolumeSeparatorChar; {Windows 下是 ":"}
--------------------------------------------------------------------------------
(3) 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();
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/zyj520401/archive/2009/12/12/4994239.aspx