[英]C++: std::ofstream method open() wipes open ifstream file on second iteration
[英]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.