From 112a0d344da9e66d20ee9ab5d488e59c5d52e6ad Mon Sep 17 00:00:00 2001 From: Angeld55 Date: Thu, 9 Apr 2020 18:09:42 +0300 Subject: added new examples --- Binary_files/BinaryFiles_Cheatsheet.pdf | Bin 0 -> 61351 bytes Binary_files/GetStructsFromBinaryFile.cpp | 47 +++++++++++++++++++++ Binary_files/README.md | 5 +++ Binary_files/SaveAndReadStudents_BinaryFile.cpp | 47 +++++++++++++++++++++ Binary_files/SaveStructsToBinaryFile(as array).cpp | 37 ++++++++++++++++ Binary_files/SaveStructsToBinaryFile.cpp | 40 ++++++++++++++++++ Binary_files/Structs.bat | Bin 0 -> 24 bytes Binary_files/StructsBAT (how does it look).png | Bin 0 -> 6050 bytes 8 files changed, 176 insertions(+) create mode 100644 Binary_files/BinaryFiles_Cheatsheet.pdf create mode 100644 Binary_files/GetStructsFromBinaryFile.cpp create mode 100644 Binary_files/README.md create mode 100644 Binary_files/SaveAndReadStudents_BinaryFile.cpp create mode 100644 Binary_files/SaveStructsToBinaryFile(as array).cpp create mode 100644 Binary_files/SaveStructsToBinaryFile.cpp create mode 100644 Binary_files/Structs.bat create mode 100644 Binary_files/StructsBAT (how does it look).png (limited to 'Binary_files') diff --git a/Binary_files/BinaryFiles_Cheatsheet.pdf b/Binary_files/BinaryFiles_Cheatsheet.pdf new file mode 100644 index 0000000..397177c Binary files /dev/null and b/Binary_files/BinaryFiles_Cheatsheet.pdf differ diff --git a/Binary_files/GetStructsFromBinaryFile.cpp b/Binary_files/GetStructsFromBinaryFile.cpp new file mode 100644 index 0000000..011629a --- /dev/null +++ b/Binary_files/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 diff --git a/Binary_files/README.md b/Binary_files/README.md new file mode 100644 index 0000000..f740e9f --- /dev/null +++ b/Binary_files/README.md @@ -0,0 +1,5 @@ +# How does the binary file look like? +The file after running **SaveStructsToBinaryFile.cpp** or **SaveStructsToBinaryFile(as array).cpp** + +![Image of the binary file after running the code](https://lh3.googleusercontent.com/NcLcTEemBj6dMkOFFjUPo2jyR_7vdrUkn0dHqx8TX1CYmtW-XZzSaDwAxscJz0m3EnniPL68ag "Binary file") + diff --git a/Binary_files/SaveAndReadStudents_BinaryFile.cpp b/Binary_files/SaveAndReadStudents_BinaryFile.cpp new file mode 100644 index 0000000..0f600aa --- /dev/null +++ b/Binary_files/SaveAndReadStudents_BinaryFile.cpp @@ -0,0 +1,47 @@ +#include +#include + +using namespace std; +void SaveStudent(const char* name, int fn, ofstream& f) +{ + f.write((const char*)&fn, sizeof(int)); //sizeof(int) is 4 + int strLen = strlen(name); + f.write((const char*)&strLen,sizeof(int)); + f.write(name, strLen); +} +void ReadStudent(ifstream& f) +{ + int fn; + f.read((char*)&fn, sizeof(int)); + + int nameLen; + f.read((char*)&nameLen, sizeof(int)); + + char* name = new char[nameLen + 1]; + f.read(name, nameLen); + name[nameLen] = '\0'; + + cout << "Name: " << name << " Fn: " << fn << endl; + delete[] name; + +} + + + +int main() +{ + //ofstream f; + // f.open("students.bat"); + // SaveStudent("Ivan",123,f); + // SaveStudent("Sasho",555,f); + // f.close(); + + //ifstream f2; + //f2.open("students.bat"); + //ReadStudent(f2); + //ReadStudent(f2); + //f2.close(); + + + +} diff --git a/Binary_files/SaveStructsToBinaryFile(as array).cpp b/Binary_files/SaveStructsToBinaryFile(as array).cpp new file mode 100644 index 0000000..146a93c --- /dev/null +++ b/Binary_files/SaveStructsToBinaryFile(as array).cpp @@ -0,0 +1,37 @@ +#include +#include +using namespace std; + +struct test +{ + char ch; + int num; +}; + +int main() +{ + + test arr[] = { { 'a', 4 }, { 'b', 5 }, { 'c', 6 } }; + + ofstream outF("Structs.bat", ios::binary); + + if (!outF.is_open()) + { + cout << "Error while opening file" << endl; + return 1; + } + + outF.write((const char*)&arr, sizeof(arr)); + //можем директно да запазим масива във файла. Резултатът ще същия като от SaveStructToBinaryFile.cpp + + + if (!outF.good()) + { + cout << "Error occurred while writing the file"; + return 1; + } + + outF.close(); + + return 0; +} \ No newline at end of file diff --git a/Binary_files/SaveStructsToBinaryFile.cpp b/Binary_files/SaveStructsToBinaryFile.cpp new file mode 100644 index 0000000..3caad14 --- /dev/null +++ b/Binary_files/SaveStructsToBinaryFile.cpp @@ -0,0 +1,40 @@ +#include +#include +using namespace std; + +struct test +{ + char ch; + int num; +}; + +int main() +{ + + test obj1{ 'a', 4 }; + test obj2{ 'b', 5 }; + test obj3{ 'c', 6 }; + + ofstream outF("Structs.bat", ios::binary); + + if (!outF.is_open()) + { + cout << "Error while opening file"<