【问题标题】:DeleteFile api doesn't delete file until process terminatedDeleteFile api 在进程终止之前不会删除文件
【发布时间】: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 代码点序列进行编码。此代码尝试执行的操作。

标签: c++ c winapi


【解决方案1】:

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

显然您的程序在其他地方打开文件并且没有关闭它。所以句柄保持打开状态直到程序存在。

确保关闭文件句柄。

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

【讨论】:

  • 是的。问题解决了。当我使用 CreateFile API 创建文件时,我忘记关闭句柄文件。因此,DeleteFile 无法删除该文件。 Tnx。
【解决方案2】:

当你打开DeleteFile documentation,你可以看到如下语句:

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

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

【讨论】:

    猜你喜欢
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    相关资源
    最近更新 更多