防止SHFILEOPERATION删除目标目录

时间:2013-11-05 16:14:29

标签: delphi winapi

我在堆栈上找到了示例代码,使用SHFILEOPERATION删除指定目录中的所有文件,效果很好。我唯一的问题是它删除了进程中的目标目录。如果在TSHFILEOpStruct中为pfrom指定的目录在其包含的所有文件被删除后仍然存在,我更愿意这样做。

我认为通过设置标志FOF_FILESONLY它只会删除文件,但也许我错过了一些东西。

我将TSHFILEOpStruct设置为以下内容:

FillChar(FileOp, SizeOf(fileOp), 0);
FileOp.wFunc  := FO_DELETE;
FileOp.pFrom  := PChar(DirName+#0); //Target directory string needs to be Double Null Terminated
FileOp.fFlags := FOF_FILESONLY or FOF_NOCONFIRMATION or FOF_SILENT or FOF_NOERRORUI;
SHFileOperation(FileOp);

是否有设置TSHFILEOpStruct来完成此任务?

我也在使用Delphi 2007,但我无法访问MSDN文档中提到的所有标志(例如FOF_NORECURSION)

为方便起见,如果需要,这里是指向上述文件的链接...... http://msdn.microsoft.com/en-us/library/windows/desktop/bb762164(v=vs.85).aspx

1 个答案:

答案 0 :(得分:4)

你告诉它删除文件夹本身,所以它会。要仅删除文件夹内的文件,您需要使用文件名wildcark掩码,例如:

FileOp.pFrom := PChar(DirName+'\*.*'#0);