Win32 API 的 CreateDirectory 函数是否支持 FLAG_DELETE_ON_CLOSE 参数?

3
我并不是Win32 API编程的专家,但我刚学到了使用CreateFile函数时,可以使用FILE_FLAG_DELETE_ON_CLOSE值将其标记为在操作系统释放它的句柄后被删除。但我似乎找不到使用CreateDirectory的相同方法,或者我错过了什么?
此外,我可以订阅此特定文件夹中的更改(例如新创建的文件),然后以某种方式标记文件夹中的所有文件吗?

1
没有尝试过,我怀疑Windows不会在目录上遵守那个标志。原因是如果目录非空,则无法删除该目录。如果操作系统不知道是否能够删除某些内容,它如何能够承诺给你删除的承诺呢? - Damon
如果您期望此目录为空,则不管如何都必须标记其中所有文件以供删除(即使您在目录上使用删除标志),因此,据我所知,FS通知是您唯一的选择。还应注意,当打开文件时,并非所有应用程序都使用FILE_SHARE_DELETE,因此如果第三方应用程序写入此目录,则可能无法设置关闭时删除标志。 - Anders
CreateFile 不是一个方法,而是一个(非成员)函数。而 CreateDictionary 和删除文件有什么关系? - Ben Voigt
1个回答

6
您可以使用FILE_FLAG_BACKUP_SEMANTICS标志打开一个目录句柄:
#include <windows.h>
#include <stdio.h>
void main()
{
    CreateDirectory(".\\testdir",NULL);
    system("pause");
    HANDLE hDir = CreateFile(".\\testdir",0,FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,0,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS|FILE_FLAG_DELETE_ON_CLOSE,NULL);
    CloseHandle(hDir);
}

在我测试的机器上(如果目录为空),这个是有效的。但我不确定它是否被记录为一种有效的操作。


LLVM代码库有一个非常相似的用法,并详细记录了其目的。 - undefined
请注意,如果目录不为空,它将不会被删除。但在这种情况下,对CreateFileCloseHandle的API调用都将成功,并且GetLastError()将返回零。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接