首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 6 SysUtils 單元函數速查手冊(三):檔案搜尋、屬性、路徑拆解、磁碟空間、字串緩衝區操作與格式化核心

     編輯:Delphi

本文為 Delphi 6 SysUtils.pas 函數大全系列第三部分,涵蓋 檔案搜尋 (FindFirst/Next/Close)、檔案日期/屬性/唯讀/刪除/重命名/路徑拆解/相對路徑/短檔名/檔案搜尋/磁碟空間、檔案時間編碼互轉、目前目錄操作、目錄建立/刪除/遞迴建立、PChar 緩衝區核心操作 (長度/結尾/移動/複製/連接/比較/掃描/大小寫/轉字串/記憶體管理)、Format 系列格式化核心、浮點數/貨幣轉字串核心 (FloatToText)。

核心函數分類速查

1. 檔案搜尋與屬性管理

函數用途關鍵點
FindFirst開始搜尋Attr: faReadOnly, faHidden, faSysFile, faVolumeID, faDirectory, faArchive, faAnyFile
FindNext繼續搜尋成功回傳 0
FindClose結束搜尋釋資源必須配對呼叫
FileGetDate取得檔案修改時間 (Handle)失敗 -1
FileSetDate設定檔案修改時間路徑或 Handle 版,成功 0
FileGetAttr取得檔案屬性失敗 $FFFFFFFF
FileSetAttr設定檔案屬性成功 0
FileIsReadOnly檢查唯讀不存在視為唯讀
FileSetReadOnly設定唯讀不存在回 False
DeleteFile刪除檔案不存在回 False
RenameFile重命名不存在回 False

2. 路徑拆解與轉換

函數用途範例
ChangeFileExt變更副檔名需加點: ChangeFileExt('a.jpg','.bmp')='a.bmp'
ExtractFilePath目錄路徑 (含斜線)'C:\Dir\File.txt' → 'C:\Dir\'
ExtractFileDir目錄路徑 (不含斜線)'C:\Dir\File.txt' → 'C:\Dir'
ExtractFileDrive磁碟機'C:\Dir' → 'C:'
ExtractFileName純檔名'C:\Dir\File.txt' → 'File.txt'
ExtractFileExt副檔名 (含點)'File.txt' → '.txt'
ExpandFileName相對轉完整路徑依目前工作目錄
ExpandFileNameCase大小寫敏感展開回傳 TFilenameCaseMatch
ExpandUNCFileNameUNC 路徑展開Linux/網路路徑
ExtractRelativePath基準→目標相對路徑'C:\Win\', 'C:\Win\Sys' → 'Sys'
ExtractShortPathName8.3 短檔名'C:\Program Files' → 'C:\PROGRA~1'
FileSearch目錄列表搜尋檔案'Calc.exe', 'D:\;C:\Win' → 'D:\Calc.exe'

3. 磁碟空間與時間編碼

函數用途參數/回傳
DiskFree可用空間Drive: 0=目前, 1=A...,Int64 Byte,失敗 -1
DiskSize總空間同上
FileDateToDateTime檔案時間整數 → TDateTime
DateTimeToFileDateTDateTime → 檔案時間整數年份 1980-2107 外回 0
GetCurrentDir目前工作目錄注意:檔案對話框會改變此值
SetCurrentDir設定工作目錄Boolean
CreateDir建立單層目錄已存在回 False,不支援多層
RemoveDir刪除空目錄Boolean
ForceDirectories遞迴建立多層目錄Boolean

4. PChar 緩衝區核心操作 (低階字串處理)

函數用途關鍵行為
StrLenPChar 長度nil 觸發例外
StrEndPChar 結尾指標nil 觸發例外
StrMove複製指定位元組數Dest 需預先配置記憶體
StrCopy複製整個 PCharDest 需足夠空間
StrECopy複製至 Dest 結尾回傳新結尾指標,可串連
StrLCopy複製指定長度MaxLen 含結束符
StrPCopyString → PCharStrLCopy(Dest, PChar(Source), Length(Source))
StrPLCopyString 指定長度 → PCharStrLCopy(Dest, PChar(Source), MaxLen)
StrCat連接 PCharStrCopy(StrEnd(Dest), Source)
StrLCat連接並限制總長度MaxLen 為連接後總長上限
StrComp比較 PChar (區分大小寫)回傳首異字元差值
StrIComp比較 PChar (不區分大小寫)
StrLComp比較指定長度 (區分大小寫)
StrLIComp比較指定長度 (不區分大小寫)
StrScan字元首次出現位置未找到回 nil
StrRScan字元最後出現位置未找到回 nil
StrPos子串首次出現位置StrPos('12345','3')='345'
StrUpperPChar 轉大寫就地修改
StrLowerPChar 轉小寫就地修改
StrPasPChar → String也可直接賦值

5. PChar 記憶體管理

函數用途關鍵點
StrAlloc配置緩衝區 (含大小資訊)需 StrDispose 釋放
StrBufSize取得 StrAlloc 配置大小
StrNew複製新 PChar需 StrDispose
StrDispose釋放 PChar 記憶體nil 安全

6. Format 系列格式化核心

函數用途格式字串語法
Format陣列常數格式化 → String%[index:][-][width][.prec]type (d/f/e/x/p/s 等)
FmtStr程序版 Format結果存入 var 參數
StrFmtPChar 緩衝區格式化回傳 PChar
StrLFmt限制長度 PChar 格式化MaxBufLen 保護緩衝區
FormatBuf低階緩衝區格式化回傳寫入位元組數
WideFormat / WideFmtStr / WideFormatBufWideString 版本Unicode 字串支援

Format 常用範例:


Format('x=%d', [12]);           // 'x=12'
Format('x=%3d', [12]);          // 'x= 12' (寬度 3)
Format('x=%.3f', [12.0]);       // 'x=12.000' (小數 3 位)
Format('x=%.*f', [5, 12.0]);    // 'x=12.00000' (動態精度)
Format('x=%.5d', [12]);         // 'x=00012' (補 0)
Format('x=%.5x', [12]);         // 'x=0000c' (十六進制)
Format('x=%1:d%0:d', [12,13]);  // 'x=1312' (索引重排)
Format('x=%p', [nil]);          // 'x=00000000' (指標)
Format('x=%1.1e', [12.0]);      // 'x=1.2E+001' (科學記號)
Format('x=%%', []);             // 'x=%' (字面 % 字元)

7. 浮點數/貨幣轉字串核心

函數用途關鍵參數
FloatToStrExtended → String≥1E15 自動科學記號
CurrToStrCurrency → String固定 4 位小數
FloatToCurrExtended → Currency超出範圍拋例外
FloatToStrF依 TFloatFormat 轉字串ffGeneral/Exponent/Fixed/Number/Currency
CurrToStrFCurrency 依格式轉字串Digits 指定小數寬度
FloatToText低階緩衝區格式化回傳寫入長度,ValueType 指定類型

實用範例精選

安全複製 PChar 避免緩衝區溢位


var Buf: array[0..255] of Char;
begin
  StrLCopy(Buf, PChar(Edit1.Text), 100); // 最多複製 100 字元
  Edit2.Text := Buf;
end;

格式化輸出對齊報表


Memo1.Lines.Add(Format('%-20s %10.2f %5d', ['Product A', 1234.56, 100]));
// Product A                1234.56   100

遞迴建立目錄並檢查空間


if ForceDirectories('D:\Data\Project\Backup') then
  if DiskFree(4) > 100 * 1024 * 1024 then // 100MB
    // 執行備份...

本部分涵蓋的 PChar 操作與 Format 格式化是 Delphi 字串處理的「內功心法」,雖高層 string 類型已封裝大部分需求,但介接 C/C++ DLL、解析二進位協定、高效能緩衝區處理時,這些低階函數不可或缺。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved