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

Windows 95/NT 檔案操作編程:使用 SHFileOperation 實現複製/移動/刪除

     編輯:VC 教學

兩種檔案操作方式比較

  • CFile 底層操作:需自行管理 Read/Write/Seek、緩衝區大小、屬性旗標,大檔案備份難以最佳化。
  • Shell API (SHFileOperation):高階封裝,支援萬用字元 (*, ?)、整個目錄/目錄樹操作、內建進度對話框、取消處理、檔案映射重命名等。

SHFileOperation 結構

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 (不確認建立目錄) 等。
  • 回傳值:0 成功,非零為錯誤碼 (參考 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 進度時仍具參考價值。

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