在 Windows 環境下操作檔案,除傳統 C/C++ 執行期庫函數(fread/fwrite)外,更高效且功能豐富的方式是呼叫 Shell API SHFileOperation。此函數支援萬用字元、目錄樹操作、進度對話框、復原資訊記錄等,行為與總管一致。
SHFILEOPSTRUCT| 成員 | 說明 |
|---|---|
hwnd | 擁有者視窗句柄,用於顯示進度/錯誤對話框 |
wFunc | 操作類型:FO_COPY、FO_MOVE、FO_RENAME、FO_DELETE |
pFrom | 來源路徑,多路徑以雙空字元(\0\0)結尾,單路徑以單空字元結尾,支援 * ? |
pTo | 目的路徑,格式同 pFrom |
fFlags | 控制旗標組合:FOF_ALLOWUNDO(可復原)、FOF_NOCONFIRMATION(不提示覆寫)、FOF_SILENT(無進度框)等 |
lpszProgressTitle | 進度對話框標題 |
SHFILEOPSTRUCT FileOp = {0};
FileOp.hwnd = m_hWnd;
FileOp.wFunc = FO_COPY;
FileOp.pFrom = "c:\\dos\0c:\\pwin98\\command\0"; // 兩個來源
FileOp.pTo = "c:\\temp\0";
FileOp.fFlags = FOF_ALLOWUNDO;
FileOp.lpszProgressTitle = "File copying";
int nOk = SHFileOperation(&FileOp);
if (nOk) TRACE("Error: %d\n", nOk);
else TRACE("Success\n");
if (FileOp.fAnyOperationsAborted) TRACE("User aborted\n");
適用於安裝程式、備份工具、檔案管理器等需可靠檔案操作的場合。