我想讀取一個數組對象(數組是一個類,我已經使用讀取和寫入函數來讀取和寫入二進制文件。將不會從文件中正確出於某種原因讀取,這是寫功能: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