我不能删除一个打开句柄的文件,对吗?所以我创建了一个文件,然后我立即尝试删除它,期望这会失败。或者我错了,在删除文件之前不必关闭句柄吗?
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?
}
答案 0 :(得分:2)
这取决于文件的打开方式。如果共享模式指定了FILE_SHARE_DELETE
,则其他人可能会将其删除。
即使你的内存映射文件,并且已经使用这个标志打开(和读/写共享),它仍然可以被shell删除(至少我已经尝试了这个并且它发生了,但也许该文件已被简单地重命名并移动到回收站)。在这种情况下,随后访问内存将导致“InPageError”C风格的异常。
答案 1 :(得分:0)
是的,它会失败。
如果应用程序尝试删除a,则DeleteFile函数将失败 对于普通I / O或作为内存映射文件打开的文件。
答案 2 :(得分:0)
如果应用程序尝试删除为普通I / O打开的文件或作为内存映射文件,则DeleteFile函数将失败。
因此,如果你没有得到这种行为,我建议你打开文件的方式。您确定检查文件是否打开是完全全面的吗?您是否尝试过首先写入文件?你能看到自己代码之外的文件吗? (即来自资源管理器)查看here了解更多详情。