如上所述这里,使用SetFileInformationByHandle与FILE_DISPOSITION_INFO
允许一个设置文件有打开的句柄在被关闭所有句柄被删除.
不过,我想删除的检索基于其文件索引(磁盘ID)的文件FILE_DISPOSITION_INFO,并
OpenFileById以安全地删除其中的区别仅在情况下的目录文件/目录.这在我的用例中是安全的,因为在NTFS系统上,文件索引在删除之前是持久的,否定ReplaceFile当前代码库处理的使用.
但是,在尝试删除句柄时,我收到错误87(ERROR_INVALID_PARAMETER).如果我使用创建的句柄删除CreateFileW,我遇到没有问题.但是,我无法做到这一点,因为Windows无法区分同一案例的两个文件/文件夹,即使NTFS可以.
我也知道打开硬链接文件存在歧义OpenFileById,因为硬链接文件共享相同的磁盘ID.可以认为硬链接文件的问题与此方案无关.我只会按ID删除目录,不能硬链接.
我的OpenFileById通话中是否有参数或设置?不知怎的,在我的SetFileInformationByHandle电话里?
我试过的其他方法:
DuplicateHandle与OpenFileById处理,提供DELETE了dwDesiredAccess和使用.ERROR_INVALID_PARAMETER结果相同.ReOpenFile与OpenFileById处理,提供DELETE了dwDesiredAccess和使用.ERROR_INVALID_PARAMETER结果相同.ReOpenFile与OpenFileById处理,提供DELETE了dwDesiredAccess,并提供FILE_FLAG_DELETE_ON_CLOSE标志.没有给出错误,但在关闭所有句柄后文件仍然存在.这是一个简单但完整的示例,它可以重现问题:
#include <stdio.h>
#include <sys/stat.h>
#include <Windows.h>
DWORD getFileID(LPCWSTR path, LARGE_INTEGER *id)
{
HANDLE h …Run Code Online (Sandbox Code Playgroud) 如果是源目录和目标目录,MoveFile实际上会将源文件的副本复制到目标文件中,这意味着我最终会看到两个文件.
这是重命名的最佳方式吗?