From 0d9276b3ef084ef8504b32c4d8832be74b514018 Mon Sep 17 00:00:00 2001 From: Angeld55 Date: Wed, 20 Mar 2019 12:38:39 +0200 Subject: Add files via upload --- BinaryFiles/GetStructsFromBinaryFile.cpp | 47 ++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 BinaryFiles/GetStructsFromBinaryFile.cpp (limited to 'BinaryFiles/GetStructsFromBinaryFile.cpp') diff --git a/BinaryFiles/GetStructsFromBinaryFile.cpp b/BinaryFiles/GetStructsFromBinaryFile.cpp new file mode 100644 index 0000000..2d91189 --- /dev/null +++ b/BinaryFiles/GetStructsFromBinaryFile.cpp @@ -0,0 +1,47 @@ +#include +#include +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; +} \ No newline at end of file -- cgit v1.3.1-23-gd82d