C++ Builder 提供一組緊密整合 VCL/RTL 的檔案操作函數,支援 AnsiString,使用最便利。分為三類:
| 函數 | 說明 |
|---|---|
| ExpandFileName | 取得完整路徑 (含磁碟機、目錄) |
| ExtractFileExt | 擷取副檔名 |
| ExtractFileName | 擷取檔名 (不含路徑) |
| ExtractFilePath | 擷取目錄路徑 |
| ExtractFileDir | 擷取目錄名 |
| ExtractFileDrive | 擷取磁碟機代號 |
| ChangeFileExt | 變更副檔名 |
| ExpandUNCFileName | 取得 UNC 網路完整路徑 |
| ExtractRelativePath | 擷取相對路徑 |
| ExtractShortPathName | 轉換為 8.3 短檔名 |
| MatchesMask | 檢查檔名是否符合萬用字元遮罩 |
extern PACKAGE AnsiString __fastcall ExpandFileName(const AnsiString FileName);
// 回傳完整路徑
ShowMessage(ExpandFileName(Application->ExeName)); // 顯示如 C:\MyBCB\Sample1.EXE
FileExists, DirectoryExistsForceDirectories (遞迴建立目錄)DeleteFile, RenameFileFileCopy (支援覆蓋選項)FileAge (取得修改時間, -1 表不存在)FileGetAttr/SetAttr (屬性: 隱藏、唯讀、系統、存檔)DiskFree/Size (磁碟剩餘/總空間)FileOpen (mode: fmOpenRead, fmOpenWrite, fmOpenReadWrite, fmShareExclusive...)FileCreateFileRead/Write (Handle, Buffer, Count)FileSeek (Handle, Offset, Origin)FileClose回傳值:Handle (>=0 成功), -1 失敗。需自行管理緩衝區與錯誤檢查。
封裝上述 Handle 操作,支援 RAII、例外安全、流式讀寫 (ReadBuffer/WriteBuffer、Seek、Position、Size)、可掛接 TStream 衍生類。範例:
TFileStream *fs = new TFileStream("data.bin", fmCreate | fmShareDenyWrite);
try {
fs->WriteBuffer(&myStruct, sizeof(myStruct));
} __finally { delete fs; }
總結:簡單路徑操作用檔名函數;管理用管理函數;資料讀寫優先用 TFileStream,僅在需精細控制共享模式或極致效能時用低階 FileOpen/Read/Write。