我希望在使用XCODE一段时间后为Microsoft Visual Studio IDE提供一个镜头。我能够导入所有代码,但无法弄清楚为什么remove
函数在Windows环境中不起作用。该文件正在写入C:\Users\Linus\source\proj\proj
我项目的同一位置。我很困惑,因为我的程序可以写入和读取文件,但不能删除它们。我在XCODE删除文件时没有任何问题,即使我改变了它的方案(文件被写入另一个目录并且删除工作正常)。我对Visual Studio没有太多经验,非常感谢有关正确设置项目的任何建议,因此我可以删除文件。
project.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:\Users\Linus\source\repos\proj\proj
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
答案 0 :(得分:4)
在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;
}
注意:即使这可能并不总是有效,尤其是在您调用删除之前可能已打开文件的病毒检查程序中。