为什么std ::删除文件始终返回-1

Why does std::remove for file always return -1?

本文关键字:返回 文件 std 删除 为什么      更新时间:2023-10-16

我正在尝试删除文件(如果存在(。因此,首先,我测试文件是否存在,如果它使用的是,则使用std::remove将其删除。test.json中包含一些与JSON相关的TXT。我还包括#include <cstdio>

   std::string file_to_remove = "test.json";
   std::ifstream f(file_to_remove.c_str());
  if (f.good()) {
    int val = std::remove(file_to_remove.c_str());
    std::cout << "nRemoving file : " << file_to_remove  << " : ret val : " << val<< std::endl;
  }

我期望ret val为0,但我得到-1

我当前的输出是:

删除文件:test.json:ret val:-1

我还确保文件已关闭。

std::remove()的文档(强调矿山(:

如果该文件当前通过此或另一个过程打开直到最后一个运行过程关闭文件; Windows不允许删除文件(。

表示如果文件打开,则如果您在Windows上,则不会删除文件。它将返回错误(例如-1(。

由于已定义了实现,任何其他平台都可以真正是什么。我会研究您的平台/编译器,看看在打开文件上调用std::remove()的结果是什么。

添加f.close((;在std ::删除ret val之前,现在为0

这很有意义,因为f.close()关闭了文件。该文件现已关闭,可以将其删除。

您尝试删除一个打开的文件。

在POSIX系统(如Linux(中,删除打开文件是可以的。它将继续存在于磁盘上,只要您打开它,您仍然可以使用它,但是由于其目录输入已被删除,因此它将是看不见的。关闭文件时,它将消失。

在Windows中,您无法删除打开的文件。使用perrorGetLastError检查错误代码。