*, ?)、整個目錄/目錄樹操作、內建進度對話框、取消處理、檔案映射重命名等。typedef struct _SHFILEOPSTRUCT {
HWND hwnd; // 父視窗 (用於進度對話框)
UINT wFunc; // 操作類型: FO_COPY, FO_MOVE, FO_DELETE, FO_RENAME
LPCSTR pFrom; // 來源路徑 (多檔以雙 null 結尾分隔)
LPCSTR pTo; // 目標路徑
FILEOP_FLAGS fFlags; // 操作旗標 (FOF_SILENT, FOF_NOCONFIRMATION, FOF_ALLOWUNDO 等)
BOOL fAnyOperationsAborted; // 使用者是否取消
LPVOID hNameMappings; // 重命名映射 (輸出)
LPCSTR lpszProgressTitle; // 進度對話框標題
} SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;
pFrom/pTo 為雙 null 結尾字串陣列:"C:\\A.txt\0C:\\B.txt\0\0"。wFunc 常用值:FO_COPY (2), FO_MOVE (1), FO_DELETE (3), FO_RENAME (4)。fFlags 組合:FOF_MULTIDESTFILES (多目標)、FOF_SILENT (無進度 UI)、FOF_NOCONFIRMMKDIR (不確認建立目錄) 等。shellapi.h)。SHFILEOPSTRUCT fos = {0};
fos.hwnd = Form1->Handle;
fos.wFunc = FO_COPY;
fos.pFrom = "C:\\Source\\File1.txt\0C:\\Source\\File2.txt\0\0";
fos.pTo = "D:\\Backup\\";
fos.fFlags = FOF_ALLOWUNDO | FOF_FILESONLY; // 允許撤銷、僅檔案
int ret = SHFileOperation(&fos);
if (ret == 0 && !fos.fAnyOperationsAborted) ShowMessage("複製完成");
此 API 為 Windows 95/NT 時代標準檔案操作方式,至今在維護舊專案或需簡單 UI 進度時仍具參考價值。