为什么std ::删除文件始终返回-1
Why does std::remove for file always return -1?
我正在尝试删除文件(如果存在(。因此,首先,我测试文件是否存在,如果它使用的是,则使用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中,您无法删除打开的文件。使用perror
或GetLastError
检查错误代码。
相关文章:
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- AcquireCredentialsHandleA() 返回 PFX 文件的0x8009030e(安全包中没有可用的凭据
- 配置文件解析器仅返回以前的值
- Glob 搜索目录也会返回文件
- C++模板编程设计问题 - 根据输入文件返回不同的类型
- 读取文件在第二次调用时返回INVALID_HANDLE
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- 使用 sftp_open() 使用 C++ 中的 SFTP libssh 将文件从本地复制到远程时,File 返回 N
- 保存json文件后如何返回文件路径
- C++程序不返回文件中文本和字符串数据的值
- 查找第一个文件/查找下一个文件不返回文件夹中的所有文件
- 如何返回文件中项目的索引.dat
- 使用 firebreath 插件打开文件夹对话框并异步返回文件夹选择,这样 java 脚本就不会被阻止
- 如何写出文件并使其返回文件
- 从函数 C++ 返回文件 ID
- QFileSystemWatcher::files() 不返回文件列表
- 将对以字符串形式返回文件内容的函数执行移动语义优化或返回值优化,我会从中受益吗
- 从c++ dll返回文件流到Centura团队开发人员
- Boost::asio::async_read返回文件结束错误的换行符
- 文件对象->文件名不返回文件的完整路径