如何将文件与已初始化的 ifstream 对象关联?
Posted
技术标签:
【中文标题】如何将文件与已初始化的 ifstream 对象关联?【英文标题】:How to associate file with already initialised ifstream object? 【发布时间】:2020-04-30 09:30:09 【问题描述】:我需要一个函数来打开文件并填充我的向量。我在不带参数的向量函数(所以我会写 list = fileBeg())和带向量参数的 void 函数之间考虑(所以我会直接传递我的列表:fileBeg(list))。我选择了第二种方式,因为我还需要我的 ifstream 对象是全局的,这样我才能写下我的输出,这样我的函数就可以像 fileBeg(list, file) 一样工作,但我不知道该怎么做。目前我有:
void fileBeg(std::vector <student> * list, std::ifstream * file)
std::string fileName;
std::cout << "Input name of file: ";
std::cin >> fileName;
std::ifstream (* file)(fileName);
student temp;
while(* file >> temp)
(* list).push_back(temp);
但我显然在std::ifstream (* file)(fileName);
上犯了错误,因为它是对 ifstream 对象文件的重新定义。我需要像 (* file)(fileName) 这样的东西,就像我们写 i = 5 如果 i 已经初始化一样,但它不能这样工作。
我可以用全局变量来做,即使对当前任务没问题,我认为这不是一个好习惯。
【问题讨论】:
【参考方案1】:流不可分配,因此即使使用正确的语法,您的方法也无法工作。
但是文件流有一个open
方法,所以这个file->open(fileName);
就是你要找的。p>
当然你应该经常检查你是否成功打开文件
file->open(fileName);
if (file->is_open())
student temp;
while (*file >> temp)
list->push_back(temp);
else
std::cout << "failed to open file!!\n";
【讨论】:
我不应该写(*文件)->打开而不是文件->打开吗? 哦,不,等等,-> 几乎与 *.为什么要使用 ->? @AlexeiSavitsky 它们的工作原理完全相同,但通常首选->
,因为它更易于阅读。以上是关于如何将文件与已初始化的 ifstream 对象关联?的主要内容,如果未能解决你的问题,请参考以下文章
文件流(fstream/ifstream/ofstream)作为类成员变量的初始化方式
使用 ofstream 将数据写入其文件后更新 ifstream 对象