c++ - ifstream 不会在下一次迭代中打开文件

标签 c++ file 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;
}

这是我的 Project directories

使用 gdb 调试器,我已经确认该文件根本没有被打开。我假设我没有正确关闭文件,但我对 C++ 还有些了解(只学了一个星期左右)。

期待看到您可以建议阅读/研究什么,但我真的很想看到这个问题的直接解决方案。

最佳答案

I assume that I did not close the files properly, [..]

是的,但这可能不是问题的原因。 C++ 方法是不显式关闭它们。由于 RAII , ifstream 将在超出范围后自行关闭(即当封闭函数终止时)。

文件无法打开的原因有很多,包括:

  • 它不存在。
  • 尝试以写入模式打开只读文件。
  • 该文件正在被另一个进程使用。 (也许您在编辑器中打开了它?)
  • 权限不足(例如,由于文件受到保护)。

关于c++ - ifstream 不会在下一次迭代中打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58787196/

相关文章:

file - 将源文件的内容附加到目标文件

c++ - 读取 txt 文件时出现 "Debug Assertion Failed"

自定义类对象的 C++ vector - 复制构造函数已删除 - std::ifstream

c++ - FLTK 中的线程

c++ - 可能的编译器错误 : Weird results using boost bessel functions with Intel compiler between two machines?

c++ - C++ 计算器中的整数限制

c++ - Window C/C++ Crypto API 示例和提示

c# - 如何从文本文件中获取 2 个数据点

c++ - 使用 ifstream 从文本文件打印整数

c++ - 如何读入文件的末尾(或刚好在末尾之前)的字符?