在C/C++中刪除文件有三種方式,假設文件路徑及名稱為D:/123.txt,Unicode編碼
第一種,利用系統system函數調用del函數刪除文件。
1 CString strTemp; // 記錄文件路徑及名稱 2 strTemp.Empty(); 3 strTemp.Format(_T("del %s"),_T("D:/123.txt")); 4 system((CW2A)strTemp);
這種方式有個不好的地方時,會彈出dos的黑框,一閃而過,無法做到無痕跡。
第二種,利用C/C++的內部函數,DeleteFile(LPCTSTR lpPath);
這里參數為LPCTSTR類型的,內部有兩個重構的函數,分別對應着UNICODE和ANSI的,這里如果lpPath是CString類型的,可直接帶入,如需轉換。
第三種,利用函數int SHFileOperation(LPSHFILEOPSTRUCT lpFileOp);
有原型可以看出來,參數指向一個SHFILEOPSTRUCT結構體。
typedef struct _SHFILEOPSTRUCT { HWND hwnd; UINT wFunc; LPCWSTR pFrom; LPCWSTR pTo; FILEOP_FLAGS fFlags; BOOL fAnyOperationsAborted; LPVOID hNameMappings; LPCWSTR lpszProgressTitle; } SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;
hwnd是Window 句柄,wFunc可以取值如下:
FO_COPY
FO_DELETE
FO_MOVE
FO_RENAME
分別對應着文件復制,刪除,移動,重命名。
pForm文件的路徑,pTo一般取NULL,fFlags取值如下:
FOF_ALLOWUNDO
FOF_NOCONFIRMATION
FOF_NOCONFIRMMKDIR
FOF_NOCOPYSECURITYATTRIBS
FOF_NOERRORUI
FOF_NORECURSION
FOF_RENAMEONCOLLISION
最后函數調用方式是:
SHFILEOPSTRUCT FileOp;
…… // 填充結構體
SHFileOperation(&FileOp);