http://hi.baidu.com/magicfuzzx/item/cda3c631afc5cb009dc65e0e
一般我們可以很輕鬆的使用DelateFile函數將檔案刪除,不過這樣又一個缺陷就是刪除的檔案不經過資源回收筒,要是誤刪除了就麻煩了,並不是所有的使用者都會資料恢複。而微軟也為我們提供了Shellapi,這裡面的函數可以用來做一些特殊的操作。
這裡我們使用SHFileOperation函數來操作,函數定義如下:
int SHFileOperation(
__in LPSHFILEOPSTRUCT lpFileOp
);
不過微軟推薦在Vista和以後的平台上使用IFileOperation介面來替換這個函數。
這個參數很簡單就是一個SHFILEOPSTRUCT 結構體,該結構體定義如下:
typedef struct _SHFILEOPSTRUCT {
HWND hwnd;//用來顯示檔案操作狀態的對話方塊控制代碼
UINT wFunc;//要執行的動作
LPCTSTR pFrom;//源檔案路徑
LPCTSTR pTo;//目標檔案路徑
FILEOP_FLAGS fFlags;//理解附加的操作選項,可以使用|運算子
BOOL fAnyOperationsAborted;//是否可中斷
LPVOID hNameMappings;//可以建立檔案對應
LPCTSTR lpszProgressTitle;//當標記為FOF_SIMPLEPROGRESS時指定視窗的名字
} SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;
參考串連:http://msdn.microsoft.com/en-us/library/bb759795%28v=vs.85%29.aspx
將檔案不經過確認就直接移到資源回收筒的代碼如下:
BOOL DelFileToRecycle(LPCTSTR lpSourceFile)
{
SHFILEOPSTRUCT shFile;
ZeroMemory(&shFile,sizeof(shFile));
shFile.pFrom = lpSourceFile;
shFile.wFunc = FO_DELETE;
//靜默,保留撤銷(資源回收筒),取消警告
shFile.fFlags =FOF_SILENT|FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
if (SHFileOperation(&shFile) != 0 )
{
return FALSE;
}
else
{
return TRUE;
}
}
函數調用很簡單:DelFileToRecycle(_T("D:\\建立文字文件.txt"));