在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
发布于 2018-06-08 00:01:59
在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;
}
注意:即使这并不总是有效的,特别是在病毒检查程序的存在,它可能已经打开了您的文件之前,您调用删除。
https://stackoverflow.com/questions/50745176
复制相似问题