我想读取一个数组对象(数组是一个类,我已经使用读取和写入函数来读取和写入二进制文件。将不会从文件中正确出于某种原因读取,这是写功能:C++写入和读取对象到二进制文件
void writeToBinFile(const char* path) const
{
ofstream ofs(path, ios_base::out | ios_base::app | ios_base::binary);
if (ofs.is_open())
{
ostringstream oss;
for (unsigned int i = 0; i < m_size; i++)
{
oss << ' ';
oss << m_data[i];
}
ofs.write(oss.str().c_str(), oss.str().size());
}
}
这是读功能:
void readFromBinFile(const char* path)
{
ifstream ifs(path, ios_base::in | ios_base::binary || ios_base::ate);
if (ifs.is_open())
{
stringstream ss;
int charCount = 0, spaceCount = 0;
ifs.unget();
while (spaceCount != m_size)
{
charCount++;
if (ifs.peek() == ' ')
{
spaceCount++;
}
ifs.unget();
}
ifs.get();
char* ch = new char[sizeof(char) * charCount];
ifs.read(ch, sizeof(char) * charCount);
ss << ch;
delete[] ch;
for (unsigned int i = 0; i < m_size; i++)
{
ss >> m_data[i];
m_elementCount++;
}
}
}
这些都是类字段:
T* m_data;
unsigned int m_size;
unsigned int m_elementCount;
我用下面的代码进行编写,然后读取(1个执行读取另一个写入):
Array<int> arr3(5);
//arr3[0] = 38;
//arr3[1] = 22;
//arr3[2] = 55;
//arr3[3] = 7;
//arr3[4] = 94;
//arr3.writeToBinFile("binfile.bin");
arr3.readFromBinFile("binfile.bin");
for (unsigned int i = 0; i < arr3.elementCount(); i++)
{
cout << "arr3[" << i << "] = " << arr3[i] << endl;
}
现在的问题是在readFromBinFile功能,它会停留在一个无限循环和PEEK ()返回-1由于某种原因,我不明白为什么。 另请注意我正在使用空格写入二进制文件,以便在每个元素之间建立一个屏障,这样我就可以知道区分数组中的对象,并在写入开始时还有一个空间,以便在先前存储的二进制数据在该文件中的数组二进制数据。
@JoachimPileborg我不使用它的二进制文件本身 – dikson231 2014-10-04 21:46:05
为什么你在开始阅读任何东西之前调用'unget'? – 2014-10-04 21:47:57
在读取函数中,你有这样的:'ss << ch;'可能你打算'ss >> ch;'? – Boris 2014-10-04 21:48:23