删除文件()不起作用
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,即使你不喜欢它。以上是关于删除文件()不起作用的主要内容,如果未能解决你的问题,请参考以下文章