DeleteFile api在进程结束前不会删除文件。

问题描述 投票:0回答:2

我已经实现了以下函数,在这个函数中,它获得了一个文件的路径,然后试图从文件系统中删除它。

这个函数不能正常工作,因为当我调用它来删除一个文件时,这个文件不会被删除,直到我关闭程序。当我关闭程序时,我指定的文件将被删除。我不知道代码有什么问题。

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;
}
c++ c winapi
2个回答
2
投票

它确实删除了文件,没有任何问题。

显然,你的程序在其他地方打开了文件,而没有关闭它。所以句柄保持打开,直到程序存在。

确保你关闭你的文件句柄。

这种行为的 DeleteFile 是一个功能,而不是一个错误。


2
投票

当你打开 删除文件你可以找到以下的语句。

DeleteFile函数在关闭时标记了一个文件的删除。因此,在最后一个文件句柄关闭之前,文件的删除不会发生。随后调用CreateFile打开文件会以ERROR_ACCESS_DENIED失败。

在调用CreateFile之前,请确保文件的所有句柄都被关闭。DeleteFile API。

© www.soinside.com 2019 - 2024. All rights reserved.