本文為 Delphi 6 SysUtils.pas 函數大全系列第二部分,涵蓋 系統語言資訊、記憶體配置/釋放、退出程序註冊、字串指標舊式管理 (Deprecated)、字串大小寫轉換 (Ansi/Wide)、字串比較 (Ansi/Wide)、字串修剪/引用/去引用/行尾調整、識別符驗證、整數/十六進制/布林轉換、資源字串載入、低層檔案控制代碼操作 (開關/讀寫/搜尋/關閉)、檔案時間/存在性/屬性/唯讀/刪除/重命名/路徑拆解/磁碟空間/目錄操作/檔案搜尋。
核心函數分類速查
1. 系統語言與記憶體
| 函數 | 用途 | 備註 |
Languages | 取得系統語言集合物件 | 可列舉 Languages.Name[i] |
AllocMem | 配置歸零記憶體 | 搭配 FreeMem 釋放 |
AddExitProc | 註冊程式結束程序 | 建議改用 finalization 區段 |
2. 字串指標舊式管理 (Deprecated,僅維護舊碼用)
| 函數/程序 | 用途 |
NewStr | 建立新字串指標 |
DisposeStr | 釋放字串指標 |
AssignStr | 更新字串指標內容 (自動釋放舊) |
AppendStr | 字串追加 (相當於 Dest := Dest + S) |
3. 字串大小寫轉換
| 分類 | 標準 | Ansi (MBCS) | Wide (Unicode) |
| 大寫 | UpperCase | AnsiUpperCase | WideUpperCase |
| 小寫 | LowerCase | AnsiLowerCase | WideLowerCase |
標準版 僅處理 ASCII;Ansi 版 呼叫 Windows CharUpperBuff/CharLowerBuff 支援多位元組字元集 (中文/日文/韓文);Wide 版 支援 UTF-16 (Unicode)。
4. 字串比較
| 分類 | 標準 | Ansi | Wide | 說明 |
| 比較 (區分大小寫) | CompareStr | AnsiCompareStr | WideCompareStr | >0 / =0 / <0 |
| 比較 (不區分大小寫) | CompareText | AnsiCompareText | WideCompareText | >0 / =0 / <0 |
| 相等判斷 (區分大小寫) | — | AnsiSameStr | WideSameStr | Boolean |
| 相等判斷 (不區分大小寫) | SameText | AnsiSameText | WideSameText | Boolean |
5. 字串修剪、引用與行尾
| 函數 | 用途 | 多載 |
Trim / TrimLeft / TrimRight | 移除兩側/左側/右側不可見字元 (≤ #31) | String / WideString |
QuotedStr | Pascal 引用字串 (單引號雙寫) | String |
AnsiQuotedStr | 自訂引用字元 | AnsiQuotedStr('abc', '"') = '"abc"' |
AnsiExtractQuotedStr | 從 PChar 提取引用字串本體 | 變更 Src 指標位置 |
AnsiDequotedStr | 還原引用字串本體 | String |
AdjustLineBreaks | 統一行尾為 CRLF (Win) / LF (Linux) | String |
IsValidIdent | 驗證合法 Pascal 識別符 | Boolean |
6. 整數、十六進制與布林轉換
| 函數 | 用途 | 關鍵參數/行為 |
IntToStr | Integer/Int64 → String | Format('%d', [Value]) |
IntToHex | Integer/Int64 → 十六進制字串 | Digits 指定最小寬度補 0 |
StrToInt | String → Integer | 失敗拋例外 |
StrToIntDef | String → Integer (預設值) | 失敗回 Default |
TryStrToInt | String → Integer (安全) | Boolean 回傳,out Value |
StrToInt64 / Def / Try | Int64 版本 | |
StrToBool | String → Boolean | 失敗拋例外 |
StrToBoolDef | String → Boolean (預設值) | |
TryStrToBool | String → Boolean (安全) | D6 Bug:需初始化 TrueBoolStrs/FalseBoolStrs |
BoolToStr | Boolean → String | UseBoolStrs=True 時 -1/0,False 時 True/False |
TryStrToBool 修正範例:
SetLength(TrueBoolStrs, 2);
SetLength(FalseBoolStrs, 2);
TrueBoolStrs[0] := 'True'; FalseBoolStrs[0] := 'False';
TrueBoolStrs[1] := 'Yes'; FalseBoolStrs[1] := 'No';
if TryStrToBool(Edit1.Text, B) then CheckBox1.Checked := B;
7. 資源字串載入
| 函數 | 用途 |
LoadStr | 依識別碼載入字串資源 |
FmtLoadStr | 格式化載入字串資源 (配合 Format 參數) |
8. 低層檔案控制代碼操作
| 函數 | 用途 | 關鍵參數/回傳 |
FileOpen | 開啟檔案 | Mode: fmOpenRead/Write/ReadWrite/ShareDenyNone...,Handle (<0 失敗) |
FileCreate | 建立檔案 | Handle,可指定 Rights (Linux) |
FileRead | 讀取至緩衝區 | 回傳位元組數,失敗負數 |
FileWrite | 寫入緩衝區 | 回傳位元組數,失敗負數 |
FileSeek | 移動檔案指標 | Origin: 0=BOF, 1=Current, 2=EOF,Int64 版支援大檔案 |
FileClose | 關閉檔案代碼 | 必須呼叫釋資源 |
9. 檔案資訊、屬性與路徑拆解
| 函數 | 用途 | 備註 |
FileAge | 檔案建立時間 (整數編碼) | 不存在 -1,配合 FileDateToDateTime 轉 TDateTime |
FileExists | 檔案是否存在 | 含隱藏檔 |
DirectoryExists | 目錄是否存在 | |
ForceDirectories | 遞迴建立多層目錄 | Boolean |
FindFirst | 開始搜尋 | Attr: faAnyFile 等,回傳 0 成功 |
FindNext | 繼續搜尋 | |
FindClose | 結束搜尋 | 必須呼叫 |
實用範例精選
列舉系統支援語言
for I := 0 to Languages.Count - 1 do
Memo1.Lines.Add(Languages.Name[I]);
// 輸出: 繁體中文(台灣), 簡體中文(中國), English(United States)...
安全配置記憶體並自動歸零
var P: PInteger;
begin
P := AllocMem(SizeOf(Integer)); // 自動歸零
P^ := 100;
ShowMessage(IntToStr(P^));
FreeMem(P, SizeOf(Integer));
end;
檔案搜尋完整模板
var SR: TSearchRec;
begin
if FindFirst('C:\Temp\*.*', faAnyFile, SR) = 0 then try
repeat
Memo1.Lines.Add(SR.Name);
until FindNext(SR) <> 0;
finally FindClose(SR); end;
路徑拆解常用組合
FullPath := 'C:\Projects\MyApp\Data\config.ini';
DirPath := ExtractFilePath(FullPath); // 'C:\Projects\MyApp\Data\'
DirOnly := ExtractFileDir(FullPath); // 'C:\Projects\MyApp\Data'
Drive := ExtractFileDrive(FullPath); // 'C:'
FileName := ExtractFileName(FullPath); // 'config.ini'
Ext := ExtractFileExt(FullPath); // '.ini'
Short := ExtractShortPathName(FullPath); // 'C:\PROJEC~1\MYAPP~1\DATA\CONFIG.INI'
本部分涵蓋的函數是 Delphi 日常開發最高頻的「字串處理 + 檔案系統互動」核心集合。掌握 Ansi*/Wide* 版本對多語系支援至關重要;檔案操作務必養成 try...finally FindClose/Close 習慣避免資源洩漏。