Помогите написать функцию (ReadFromFileAtPos(const std::string& filename, int datenStrNr, int anzahl, Daten** pOutDaten)
) пожалуйста для чтения структуры из бинарного файла. Функция должна выдавать int сколько структур найдено
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
struct Daten
{
int i;
float f;
double d;
char c;
Daten(int i )
{
this->i = i;
f = i;
d = i;
}
bool operator==(const Daten& a) const
{
return (this->i==a.i && this->f == a.f && this->d == a.d && this->c == a.c);
}
};
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
bool SmartStructBuffer::WriteToFile(const std::string& filename)
{
fstream myFile( filename,ios::binary | ios::out);
if(!myFile.is_open())
{
cerr << "Fehler beim Цffnen der Datei " << &filename << endl;
return false;
}
else
{
myFile.write((char*)&m_maxSize, sizeof(m_maxSize));
myFile.write((char*)&m_size, sizeof(m_size));
myFile.write(m_buff, m_size );
}
myFile.close();
return true;
}
bool SmartStructBuffer::ReadFromFile(const std::string& filename)
{
fstream myFile (filename, ios::binary | ios::in);
if(!myFile.is_open())
{
cerr << "Fehler beim Цffnen der Datei " << &filename << endl;
return false;
}
else
{
myFile.read((char*)&m_maxSize, sizeof(m_maxSize));
myFile.read((char*)&m_size, m_size);
delete[] m_buff;
m_buff = new char [m_maxSize];
myFile.read(m_buff, m_size);
}
myFile.close();
return true;
}
int SmartStructBuffer::ReadFromFileAtPos(const std::string& filename, int datenStrNr, int anzahl, Daten** pOutDaten)
{
fstream myFile (filename, ios::binary | ios::in);
if(!myFile.is_open())
{
cerr << "Fehler beim Öffnen der Datei " << &filename << endl;
return false;
}
else
{
myFile.read((char*)&m_maxSize, sizeof(m_maxSize));
myFile.read((char*)&m_size, m_size);
}
return 0;
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
int main()
{
SmartStructBuffer sb(sizeof(Daten));
const int IT = 5;
for(int i = 0; i < IT; i++)
{
Daten s(i);
sb.Add(s);
}
const std::string& pFILENAME = "C:\\Users\\Inna\\Documents\\01.bin";
sb.WriteToFile(pFILENAME);
SmartStructBuffer sb2(123);
sb2.ReadFromFile(pFILENAME);
assert(sb.GetmaxSize() == sb2.GetmaxSize());
for(int i =0; i < sb2.GetSize()/sizeof(SmartStructBuffer); i++)
{
assert(sb[i] == sb2[i]);
}
Daten* pOut;
//ReadFromFileAtPos(pFILENAME,3,2, &pOut);
return 0;
}