ifstream не открывает файл в следующей итерации - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть два аналогичных метода, которые одинаково открывают файл, но обрабатывают их и возвращают значения немного по-разному, но пока первый метод делает это успешно, второй метод, который вызывается после первого, завершается неудачей.

Я пытался изменить путь к этому файлу, его расширение, но я думаю, что мне не хватает некоторых важных знаний о 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 ++ (изучал его всего неделю или около того).

Будем рады узнать, что вы можете предложить для чтения / исследования,все же я действительно хотел бы видеть прямое решение этой проблемы.

1 Ответ

0 голосов
/ 10 ноября 2019

Я предполагаю, что я не закрыл файлы должным образом, [..]

Да, но это, вероятно, не является причиной проблемы. C ++ способ не закрывать их явно. Из-за RAII , ifstream закроется сам, как только выйдет из области видимости (т. Е. Когда завершится функция включения).

Существует множество причин, по которым файл может не открыться,в том числе:

  • Не существует.
  • Попытка открыть файл только для чтения в режиме записи.
  • Файл используется другим процессом. (Может быть, он открыт в редакторе?)
  • Недостаточно прав (например, из-за защищаемого файла).
...