用于以编程方式删除文件和文件夹的Win32 API是什么?
编辑
我正在寻找DeleteFile和RemoveDirectory.但是,对于这个项目,我最终使用SHFileOperation.我发现CodeGuru 的示例代码很有帮助.
有两种方法可以解决这个问题.一种是通过文件服务(使用DeleteFile和RemoveDirectory等命令),另一种是通过Windows Shell(使用SHFileOperation).如果要删除非空目录或者想要浏览器样式反馈(例如,使用飞行文件的进度对话框),建议使用后者.最快的方法是创建一个SHFILEOPSTRUCT,初始化它并调用SHFileOperation,因此:
void silently_remove_directory(LPCTSTR dir) // Fully qualified name of the directory being deleted, without trailing backslash { SHFILEOPSTRUCT file_op = { NULL, FO_DELETE, dir, "", FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT, false, 0, "" }; SHFileOperation(&file_op); }
这会以静默方式删除整个目录.您可以通过改变SHFILEOPSTRUCT初始化来添加反馈和提示 - 请阅读它.
我想你想要DeleteFile和RemoveDirectory
请参阅uvgroovy上面的评论.在'dir'字段的末尾需要2个空值.
int silently_remove_directory(LPCTSTR dir) // Fully qualified name of the directory being deleted, without trailing backslash { int len = strlen(dir) + 2; // required to set 2 nulls at end of argument to SHFileOperation. char* tempdir = (char*) malloc(len); memset(tempdir,0,len); strcpy(tempdir,dir); SHFILEOPSTRUCT file_op = { NULL, FO_DELETE, tempdir, "", FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT, false, 0, "" }; int ret = SHFileOperation(&file_op); free(tempdir); return ret; // returns 0 on success, non zero on failure. }
我相信DeleteFile
不会将文件发送到回收站.此外,RemoveDirectory
只删除空目录.SHFileOperation可以让您最大程度地控制删除内容和删除内容,并在需要时显示标准Windows UI对话框(例如"准备删除等").