删除具有打开句柄的文件
Deleting a file with an open Handle
我应该无法删除带有打开句柄的文件,对吗?所以我创建了一个文件,然后我立即尝试删除它,预计这会失败。还是我错了,在删除文件之前不必关闭句柄?
HANDLE hFile = CreateFile (TEXT(file),
GENERIC_WRITE,
0,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
//FAIL
}
if(DeleteFile(file))
{
//Should it ever get here cos i dont close the handle?
}
这取决于文件的打开方式。 如果指定了共享模式FILE_SHARE_DELETE
,则其他人可能会将其删除。
即使您对文件进行了内存映射,并且它已使用此标志(和读/写共享)打开,那么它仍然可以被 shell 删除(至少我已经尝试过并且它发生了,但也许该文件只是被重命名并移动到回收站)。 在这种情况下,随后访问内存将导致"InPageError"C 样式异常。
是的,它会失败。
如果应用程序尝试删除 为正常 I/O 打开或作为内存映射文件打开的文件。
你试过这个吗?MS 文档指出:
如果应用程序尝试删除为正常 I/O 打开的文件或作为内存映射文件打开的文件,则 DeleteFile 函数将失败。
因此,如果您没有获得这种行为,我建议您将其归结为您打开文件的方式。您确定您对文件是否打开的检查是完全全面的吗?您是否尝试过先写入文件?你能在自己的代码之外看到文件吗?(即来自资源管理器)查看此处了解更多详情。
相关文章:
- 在读取文件后重置句柄
- 我需要通过窗口句柄(HWND)获取文件,我该怎么办?
- 创建文件函数是否可以打开仅在WinObj实用程序中的全局目录下列出的设备的句柄?
- 确定文件句柄是否为管道句柄
- 如何从文件句柄获取包含目录的句柄
- 线程1:EXC_BAD_ACCESS错误,此错误在第一行的CPP文件中的句柄函数中出现
- Cygwin:打开句柄时删除文件
- 如何从exe文件的名称中查找窗口句柄
- 将C文件句柄分配给C 文件流
- 调用posix_spawn时关闭所有文件句柄
- 串行端口:读取文件和关闭句柄
- 将句柄转换为文件描述符
- 保持潜在的文件句柄
- 文件的 MD5 具有句柄 hFile
- 在先前关闭的文件句柄上的 fclose() 上出现双重释放错误
- 我可以在没有文件的情况下创建句柄吗
- 创建文件FILE_FLAG_DELETE_ON_CLOSE在关闭任何句柄后失败
- 正在从内存中获取文件句柄
- HANDLE(IntPtr)已过时,kernel32.dll,安全文件句柄到IntPtr
- 如何检查文件指针/描述符/句柄是否关联到同一个文件/管道/终端