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