c++ - ifstream 在下一次迭代中不打开文件
问题描述
我有两种类似的方法可以相同地打开文件,但处理它们并返回值略有不同,但是虽然第一种方法成功地做到了,但在第一种方法之后调用的第二种方法失败了。
我曾尝试更改此文件的路径及其扩展名,但我想我错过了有关 ifstream 的一些重要知识。
vector<User> Database::createUserDatabase()
{
vector<User> users;
ifstream inputFile;
inputFile.open(pathToFile, ios::in);
//Some file processing
inputFile.close();
return users;
}
这完美地工作,而
vector<User> Database::createBookDatabase()
{
vector<Book> books;
ifstream inputFile;
inputFile.open(pathToFile, ios::in);
//Some file processing
inputFile.close();
return books;
}
每当我检查文件是否已打开或未使用时都无法结束
inputFile.is_open()
这些函数在类文件Database.cpp、User.cpp、Book.cpp中定义,它们正确链接到main.cpp,内容如下:
#include <iostream>
#include <cstdlib>
#include <string>
#include <cstring>
#include <sstream>
#include <vector>
#include <fstream>
#include "../lib/Book.h"
#include "../lib/User.h"
#include "../lib/Database.h"
using namespace std;
int main()
{
Database userDatabase("../database/users.txt", "users");
Database bookDatabase("../database/lmsdb.txt", "books");
vector<User> users = userDatabase.createUserDatabase();
vector<Book> books = bookDatabase.createBookDatabase();
return 0;
}
这是我的项目目录
使用 gdb 调试器,我已经确认该文件根本没有被打开。我假设我没有正确关闭文件,但我对 C++ 有一点了解(只学了一周左右)。
期待看到您可以建议阅读/研究什么,但我真的很想看到一个直接解决这个问题的方法。
解决方案
我假设我没有正确关闭文件,[..]
是的,但这可能不是问题的原因。C++ 方法是不显式关闭它们。由于RAII,ifstream
一旦超出范围(即封闭函数终止时),它将自行关闭。
文件无法打开的原因有很多,包括:
- 它不存在。
- 尝试以写入模式打开只读文件。
- 该文件正被另一个进程使用。(也许你已经在编辑器中打开了它?)
- 权限不足(例如,由于文件受到保护)。
推荐阅读
- c++ - Tensorflow C++ 简单图创建示例执行
- linux - ATAG 和 cmdline 有什么区别?
- docker - 使用 Docker 的 Flowable 无法启动 - Tomcat HTTP 状态 404 - 未找到
- android - 我的 Android 应用在某些设备上安装后(启动前)立即询问位置权限
- auth0 - 如何在身份验证锁屏初始化之前发出 Web 请求?
- java - forEach 子句遍历 Vector 的索引
- android - W/Intercom realtime:没有实时端点,所以我们无法连接
- row-level-security - 应用行级安全性后,我们无法解析 AWS QuickSight 中出现的 SQL 语法消息
- java - 如何在我的代码中修复 NoSuchElementException
- terraform - 无法下载 terraform 模块