gpt4 book ai didi

c++ - Ifstream 读取函数不会加载到 vector 中

转载 作者:行者123 更新时间:2023-11-30 01:17:47 29 4
gpt4 key购买 nike

我对编程有些陌生,所以我不确定如何搜索这个问题,而且我知道我问了另外 2 个关于这个的问题,但我似乎无法解决这个问题。

我有一个问题,我有一个 vector :

vector<Device*> Devicelist_;

我尝试加载设备以使用此功能的地方(我已经制作了一个保存功能,它可以工作):

bool Devicelist::LoadFromFile() //Opdaterer vector<Device> fra fil
{
ifstream LoadFile("Devices.dat", ios::in | ios::binary);

if (!LoadFile)
{
cerr << "File could not be opened." << endl;
return false;
}

LoadFile.seekg(0, ios::end);
int numberOfDevices = LoadFile.tellg() / sizeof(Device);

for (int i = 0; i < numberOfDevices; i++)
{
Devicelist_.push_back(new Device);
LoadFile.read(reinterpret_cast<char *>(Devicelist_[i]), sizeof(Device));
}

cout << Devicelist_[0]->getName() << endl;

LoadFile.close();
return true;
}

问题是 LoadFile.read() 没有将任何设备加载到设备列表中。

你能看出我的问题是什么吗?提前致谢。

最佳答案

你的问题其实很简单。您忘记重置您的获取位置:

LoadFile.seekg(0, ios::end);
int numberOfDevices = LoadFile.tellg() / sizeof(Device);

for (int i = 0; i < numberOfDevices; i++)

应该是

LoadFile.seekg(0, ios::end);
int numberOfDevices = LoadFile.tellg() / sizeof(Device);
LoadFile.seekg(0L, ios::beg);
for (int i = 0; i < numberOfDevices; i++)

查找数字的替代方法是使用统计信息:

#include <sys/stat.h>
int getNumberOfDevices(char *filename)
{
struct stat st;
return st.st_size / sizeof(Device);
}

或者,如果你想避免统计,你可以这样做:

bool Devicelist::LoadFromFile() //Opdaterer vector<Device> fra fil
{
ifstream LoadFile("Devices.dat", ios::in | ios::binary);
if (!LoadFile)
{
cerr << "File could not be opened." << endl;
return false;
}
int numberOfDevices = 0;
while (true)
{
Device *tmp = new device;
LoadFile.read(reinterpret_cast<char *>(tmp), sizeof(Device));
if (LoadFile.good()) //we successfully read one
{
++numberOfDevices;
Devicelist_.push_back(tmp);
}
else break; //get out of the infinite loop
}
cout << Devicelist_[0]->getName() << endl;
LoadFile.close();
return true;
}

这样,它会读取所有这些,而不会弄乱位置,并在完成后进行计数。

关于c++ - Ifstream 读取函数不会加载到 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23641371/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com