删除文件()不起作用

Posted

技术标签:

【中文标题】删除文件()不起作用【英文标题】:DeleteFile() not working 【发布时间】:2017-01-26 16:57:37 【问题描述】:

我在尝试DeleteFile()函数,我写了下面的程序。

#include <iostream>
#include <fstream>
#include <windows.h>
using namespace std;
int main()
    FILE * filetxt;
    // creat a file
    filetxt = fopen("C:\\Users\\Thomas\\Desktop\\filetxt.txt", "w");

    // delete the file 
    if (DeleteFile("\\\\.\\C:\\Users\\Thomas\\Desktop\\filetxt.txt") != 0)
        cout<<"success";
    else
        cout<<"fail";
    
    cin;

但是程序没有按预期运行。创建的文件没有被删除。

输出是:

fail

【问题讨论】:

那是因为你打开了那个文件。您应该先关闭该文件,然后再尝试删除它 为什么不打电话给GetLastError看看文件删除失败的原因? 尝试在"// delete the file"行前添加fclose(); > 如果应用程序尝试删除为正常 I/O 或作为内存映射文件打开了其他句柄的文件,DeleteFile 函数将失败(打开其他句柄时必须指定 FILE_SHARE_DELETE) . 我很惊讶 \\.\ 路径表示法适用于非 Unicode 版本的 DeleteFile。 【参考方案1】:

您使用fopen 打开文件并调用DeleteFile 之前使用fclose 关闭它。

你可以从DeleteFile MSDN documentation读到:

如果应用程序尝试删除,DeleteFile 函数会失败 为正常 I/O 打开其他句柄的文件或作为 内存映射文件(FILE_SHARE_DELETE 必须已指定 当其他句柄打开时)。

另请注意,如果失败,您可以在DeleteFile 之后调用GetLastError 以获取错误代码,其中包含有关失败原因的更多信息。

【讨论】:

回答有关共享违规的问题,甚至不提及共享,充其量是不完整的。您没有必须在删除文件之前关闭它。您只需确保使用适当的共享模式打开它。不打开文件等同于共享任何内容,但这只是更普遍问题的一个特例:确保不会引发共享冲突。 @IInspectable 我鼓励您编写自己的答案,而不是对其他人的答案做出“非常不完整”之类的判断。等等,I've found an answer of yours 在 Unicode 项目中从 std::string 转换为 CString,没有提及代码页和 std::string 的编码。我猜它仍然“非常不完整”,但无论如何...... 啊该死的。必须 -1 这个,因为是你。 @IInspectable 啊该死的。我对你的另一个答案表示赞同,只是因为是你。您可以否决我的每个答案,但我仍然认为这个(虽然不完美)是一个有效的好答案,不值得投反对票。当人们开始理解为更谦虚、更尊重他人的努力和时间时,*** 将成为一个更好的社区。​​span> 谦虚地接受voting is important,即使你不喜欢它。

以上是关于删除文件()不起作用的主要内容,如果未能解决你的问题,请参考以下文章

删除IE10中的输入类型文件不起作用

在node.js中删除文件不起作用

为啥使用 sed 删除不起作用?

.gitignore不起作用/无效,.idea文件夹无法删除

用于删除 C++ 中的注释的程序不起作用

removeItemAtPath 在设备上不起作用