首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++无法在Windows环境中删除文件

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

Stack Overflow用户
提问于 2018-06-07 23:35:01
回答 1查看 1.7K关注 0票数 -1

在XCODE上工作了一段时间后,我想给Microsoft Visual Studio IDE一个机会。我可以导入我所有的代码,但是我不明白为什么remove函数在Windows环境下不能工作。该文件正被写入与我的项目相同的位置的C:\Users\Linus\source\proj\proj。我感到困惑,因为我的程序可以写入和读取文件,但不能删除它们。我在XCODE删除文件时没有遇到任何问题,即使我改变了它的方案(文件被写到另一个目录,删除效果很好)。我没有太多使用Visual Studio的经验,非常感谢任何关于正确设置我的项目的建议,以便我可以删除文件。

project.cpp

代码语言:javascript
复制
#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;
}

项目目录

代码语言:javascript
复制
 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 00:01:59

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

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

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

代码语言:javascript
复制
#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;
}

注意:即使这并不总是有效的,特别是在病毒检查程序的存在,它可能已经打开了您的文件之前,您调用删除。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50745176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档