ifstream 不会在下一次迭代中打开文件
ifstream does not open a file in the next iteration
我有两个类似的方法,它们以相同的方式打开文件,但处理它们和 return 值的方式略有不同,但是当第一个方法成功完成时,第二个方法在第一个方法之后调用, 失败。
我试过更改此文件的路径及其扩展名,但我想我错过了一些关于 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++还有些了解(才学了一个星期左右)。
期待看到您的建议reading/researching,但我真的很想看到这个问题的直接解决方案。
I assume that I did not close the files properly, [..]
是的,但这可能不是问题的原因。 C++ 方法是不显式关闭它们。由于 RAII,ifstream
将在超出范围后自行关闭(即当封闭函数终止时)。
文件无法打开的原因有很多,包括:
- 不存在。
- 正在尝试以写入模式打开只读文件。
- 另一个进程正在使用该文件。 (也许你用编辑器打开过它?)
- 权限不足(例如由于文件被保护)。
我有两个类似的方法,它们以相同的方式打开文件,但处理它们和 return 值的方式略有不同,但是当第一个方法成功完成时,第二个方法在第一个方法之后调用, 失败。
我试过更改此文件的路径及其扩展名,但我想我错过了一些关于 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++还有些了解(才学了一个星期左右)。
期待看到您的建议reading/researching,但我真的很想看到这个问题的直接解决方案。
I assume that I did not close the files properly, [..]
是的,但这可能不是问题的原因。 C++ 方法是不显式关闭它们。由于 RAII,ifstream
将在超出范围后自行关闭(即当封闭函数终止时)。
文件无法打开的原因有很多,包括:
- 不存在。
- 正在尝试以写入模式打开只读文件。
- 另一个进程正在使用该文件。 (也许你用编辑器打开过它?)
- 权限不足(例如由于文件被保护)。