簡體   English   中英

ifstream 在下一次迭代中不打開文件

[英]ifstream does not open a file in the next iteration

我有兩個類似的方法可以相同地打開一個文件,但是處理它們並返回值略有不同,但是雖然第一個方法成功地做到了,但在第一個方法之后調用的第二個方法失敗了。

我曾嘗試更改此文件的路徑及其擴展名,但我想我錯過了有關 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()

這些函數在 class 文件 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超出 scope (即當封閉的 function 終止時),它將自行關閉。

文件無法打開的原因有很多,包括:

  • 它不存在。
  • 嘗試以寫入模式打開只讀文件。
  • 該文件正被另一個進程使用。 (也許你已經在編輯器中打開了它?)
  • 權限不足(例如,由於文件受到保護)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM