diff options
8 files changed, 176 insertions, 0 deletions
| -rw-r--r-- | Binary_files/BinaryFiles_Cheatsheet.pdf | bin | 0 -> 61351 bytes | |||
| -rw-r--r-- | Binary_files/GetStructsFromBinaryFile.cpp | 47 | ||||
| -rw-r--r-- | Binary_files/README.md | 5 | ||||
| -rw-r--r-- | Binary_files/SaveAndReadStudents_BinaryFile.cpp | 47 | ||||
| -rw-r--r-- | Binary_files/SaveStructsToBinaryFile(as array).cpp | 37 | ||||
| -rw-r--r-- | Binary_files/SaveStructsToBinaryFile.cpp | 40 | ||||
| -rw-r--r-- | Binary_files/Structs.bat | bin | 0 -> 24 bytes | |||
| -rw-r--r-- | Binary_files/StructsBAT (how does it look).png | bin | 0 -> 6050 bytes |
diff --git a/Binary_files/BinaryFiles_Cheatsheet.pdf b/Binary_files/BinaryFiles_Cheatsheet.pdf Binary files differnew file mode 100644 index 0000000..397177c --- /dev/null +++ b/Binary_files/BinaryFiles_Cheatsheet.pdf 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 <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; +}
\ 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** + + + 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 <iostream> +#include <fstream> + +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 <iostream> +#include <fstream> +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 <iostream> +#include <fstream> +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"<<endl; + return 1; + } + + //запазваме 3-те обекта във файла + outF.write((const char*)&obj1, sizeof(test)); + outF.write((const char*)&obj2, sizeof(test)); + outF.write((const char*)&obj3, sizeof(test)); + + 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/Structs.bat b/Binary_files/Structs.bat Binary files differnew file mode 100644 index 0000000..37573c8 --- /dev/null +++ b/Binary_files/Structs.bat diff --git a/Binary_files/StructsBAT (how does it look).png b/Binary_files/StructsBAT (how does it look).png Binary files differnew file mode 100644 index 0000000..5e9e5b3 --- /dev/null +++ b/Binary_files/StructsBAT (how does it look).png |
