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

Windows Shell API 實現檔案複製、移動與刪除的最佳實踐

     編輯:關於C++

在 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進度對話框標題

VC++ 6.0 範例:複製多個來源到單一目標目錄

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");

優勢總結

  • 無額外 DLL 相依,直接呼叫系統 Shell。
  • 自動處理長檔名、網路路徑、權限提示等複雜情境。
  • 進度 UI 與使用者體驗與系統一致。

適用於安裝程式、備份工具、檔案管理器等需可靠檔案操作的場合。

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