Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi Win32 API CreateDirectory在关闭时带有标记“删除”。可能的_Winapi_Create Directory - Fatal编程技术网

Winapi Win32 API CreateDirectory在关闭时带有标记“删除”。可能的

Winapi Win32 API CreateDirectory在关闭时带有标记“删除”。可能的,winapi,create-directory,Winapi,Create Directory,我当然不是Win32 API编程方面的专家,但我刚刚学到的是,使用函数,我可以使用FILE\u FLAG\u DELETE\u on\u CLOSE值,在释放其句柄后,将其标记为被操作系统删除。我似乎找不到同样的方法来使用,或者我错过了什么 或者,我是否可以订阅此特定文件夹中的更改(例如创建的新文件),然后以某种方式使用此标志标记文件夹中的所有文件 您可以使用FILE\u FLAG\u BACKUP\u语义标志打开目录句柄: #include <windows.h> #include

我当然不是Win32 API编程方面的专家,但我刚刚学到的是,使用函数,我可以使用
FILE\u FLAG\u DELETE\u on\u CLOSE
值,在释放其句柄后,将其标记为被操作系统删除。我似乎找不到同样的方法来使用,或者我错过了什么


或者,我是否可以订阅此特定文件夹中的更改(例如创建的新文件),然后以某种方式使用此标志标记文件夹中的所有文件

您可以使用FILE\u FLAG\u BACKUP\u语义标志打开目录句柄:

#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);
}
#包括
#包括
void main()
{
CreateDirectory(“.\\testdir”,NULL);
系统(“暂停”);
HANDLE hDir=CreateFile(“.\\testdir”,0,文件共享读取,文件共享写入,文件共享删除,0,打开现有,文件标志备份语义,文件标志删除打开,空);
闭合手柄(hDir);
}

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

如果没有尝试过,我怀疑Windows是否会在目录上使用该标志。原因是如果目录为非空,则无法删除该目录。如果操作系统不知道是否能够删除某个目录,它怎么能给你一个删除某个目录的承诺。如果你希望该目录为非空,你必须将其中的所有文件标记为删除,无论发生什么情况(即使你在该目录上使用了删除标志),因此FS通知是你唯一的选择。还应注意的是,并非所有应用程序在打开文件时都使用FILE_SHARE_DELETE,因此如果第三方应用程序写入此目录,您可能无法设置DELETE on close标志。
CreateFile
不是一个方法,而是一个(非成员)函数。
CreateDictionary
与删除文件有什么关系?