Website Summary Files Commits Branches @commit @diff @stats
path: root / BinaryFiles / GetStructsFromBinaryFile.cpp
blob: 2d911898de3642405f29255a8495baeb2d6c850c (plain) (blame)
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
#include <iostream>
#include <fstream>
using namespace std;

struct test
{
	char ch;
	int num;
};

int GetFileSize(ifstream& ifs)
{
	ifs.seekg(0, std::ios::end); //отиваме в края на файла
	int size = ifs.tellg(); //запазваме коя е текущата позиция(тя всъщност е и размерът на файла)
	ifs.seekg(0, std::ios::beg); //връщаме се в началото на файла  
	return size;
//тази функция е хубаво да я извикваме преди да сме чели каквото и да е от файла, понеже ще се върнем в началото и ще загубим информация до къде сме стигнали с четенето
}

 
int main()
{
	std::ifstream inF("Structs.bat", std::ios::binary);

	if (!inF.is_open())
		return false;

	int fileSize = GetFileSize(inF); // взимаме големината на файла
	int objectCount = fileSize / sizeof(test); // намираме броя на обектите записани във файла

	test* arr = new test[objectCount];

	inF.read((char*)arr, fileSize); //директно ги четем в масива

	if (!inF)
	{
		cout << "Error occurred while reading from the file";
		return 1;
	}
	inF.close();

	for (int i = 0; i < objectCount; i++)
		cout << arr[i].ch << " " << arr[i].num << endl;
	delete[] arr;

	return 0;
}