C++ 无法删除 Windows 环境中的文件

C++ Cannot Remove File in Windows Environment

本文关键字:文件 环境 Windows 删除 C++      更新时间:2023-10-16

我想在XCODE上工作一段时间后Microsoft Visual Studio IDE试一试。我能够导入我的所有代码,但无法弄清楚为什么remove函数在 Windows 环境中不起作用。正在写入该文件以C:UsersLinussourceprojproj我的项目的同一位置。我很困惑,因为我的程序可以写入和读取文件,但无法删除它们。即使我更改了它的方案,我在 XCODE 删除文件时也没有任何问题(文件被写入另一个目录并且删除工作正常(。我对Visual Studio没有太多经验,非常感谢有关正确设置项目的任何建议,以便我可以删除文件。

项目.cpp

#include "stdafx.h"
#include "iostream"
#include "fstream"
using namespace std;

int main()
{
ifstream newFile("newFile.txt");
if (remove("newFile.txt") != 0) {
cout << "removed file" << endl;
}
return 0;
}

项目目录

Directory of C:UsersLinussourcereposprojproj
06/06/2018  11:49 PM    <DIR>          .
06/06/2018  11:49 PM    <DIR>          ..
06/07/2018  08:03 AM    <DIR>          Debug
06/06/2018  11:41 PM               288 proj.cpp
06/06/2018  11:49 PM             8,362 proj.vcxproj
06/06/2018  11:48 PM             1,519 proj.vcxproj.filters
06/06/2018  11:41 PM               165 proj.vcxproj.user
06/07/2018  08:03 AM                16 firstHalf.txt
06/07/2018  08:03 AM                 0 newFirstHalf.txt
06/07/2018  08:03 AM                 0 newSecondHalf.txt
06/07/2018  08:03 AM                28 random.txt          //can't remove this
06/07/2018  08:03 AM                14 secondHalf.txt
06/06/2018  11:41 PM               602 stdafx.cpp
06/06/2018  11:41 PM               642 stdafx.h
06/06/2018  11:41 PM               630 targetver.h
12 File(s)         12,266 bytes
3 Dir(s)  37,871,968,256 bytes free

在 Mac/Linux/Unix 上,您可以删除打开的文件,因为文件系统足够聪明,知道在删除打开的文件时,在最后一个句柄关闭之前不要删除实际的磁盘文件。

Windows没有这个概念,所以通常不能删除在程序中打开的文件(尽管通常仍然可以重命名它们(。

若要修复代码,请在删除文件之前关闭流:

#include "stdafx.h"
#include "iostream"
#include "fstream"
using namespace std;

int main()
{
ifstream newFile("newFile.txt");
if (!newFile) {
cout << "file not opened" << endl;
return 1;
}
newFile.close();
if (remove("newFile.txt") == 0) {
cout << "removed file" << endl;
}
return 0;
}

注意:即使这样也可能并不总是有效,尤其是在存在病毒检查器的情况下,这些检查器可能在您调用删除之前打开了您的文件。