DeleteFile api 在进程终止之前不会删除文件
Posted
技术标签:
【中文标题】DeleteFile api 在进程终止之前不会删除文件【英文标题】:DeleteFile api doesn't delete file until process terminated 【发布时间】:2020-04-29 17:16:22 【问题描述】:我已经实现了以下函数,它获取文件的路径,然后尝试从文件系统中删除它。
该函数不能正常工作,因为当我调用它删除文件时,直到我关闭程序才会删除该文件。当我关闭程序时,我指定的文件将被删除。不知道代码有什么问题:
bool DeleteFileOnSystem(const char* arg_path, const char* arg_name_file)
char c_FilePath[MAX_PATH];
strcpy_s(c_FilePath, MAX_PATH, arg_path);
strcat(c_FilePath, arg_name_file);
if (DeleteFile(c_FilePath))
return true;
else
return false;
【问题讨论】:
“然后尝试删除它” - 事实上,这是一次尝试。 将在某个时候失败的尝试。 Windows 的内部字符编码是 UTF-16LE,其中包括文件 I/O API。您不能使用 ANSI 编码对每个 Unicode 代码点序列进行编码。此代码尝试执行的操作。 【参考方案1】:它确实删除了文件,没有任何问题。
显然您的程序在其他地方打开文件并且没有关闭它。所以句柄保持打开状态直到程序存在。
确保关闭文件句柄。
DeleteFile
的这种行为是一项功能,而不是错误。
【讨论】:
是的。问题解决了。当我使用 CreateFile API 创建文件时,我忘记关闭句柄文件。因此,DeleteFile 无法删除该文件。 Tnx。【参考方案2】:当你打开DeleteFile documentation,你可以看到如下语句:
DeleteFile 函数在关闭时标记要删除的文件。因此,在文件的最后一个句柄关闭之前,不会发生文件删除。后续调用 CreateFile 以打开文件失败并显示 ERROR_ACCESS_DENIED。
在调用DeleteFile
API 之前,确保文件的所有句柄都已关闭。
【讨论】:
以上是关于DeleteFile api 在进程终止之前不会删除文件的主要内容,如果未能解决你的问题,请参考以下文章