Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 03
diff options
context:
space:
mode:
Commit3e3824660ab8b37d6eca60d411711dbfa5a19fc6 (patch)
Author
 Angel Dimitriev <angel_dimitriev@abv.bg>
2022-03-08 19:26:40 +0200
Committer
 GitHub <noreply@github.com>
2022-03-08 19:26:40 +0200
Files4bbba0ef256c15ff5ec43aaae3bf9e892a006538 /Sem. 03
Object-oriented_programming_FMI-3e3824660ab8b37d6eca60d411711dbfa5a19fc6.tar
Object-oriented_programming_FMI-3e3824660ab8b37d6eca60d411711dbfa5a19fc6.tar.gz
Object-oriented_programming_FMI-3e3824660ab8b37d6eca60d411711dbfa5a19fc6.zip
Parente8c9c046343dffe4f3872ca7e95081f8a8c47927 (diff)
Create README.md
1 files changed, 103 insertions, 0 deletions
-rw-r--r--Sem. 03/README.md103
diff --git a/Sem. 03/README.md b/Sem. 03/README.md
new file mode 100644
index 0000000..082e324
--- /dev/null
+++ b/Sem. 03/README.md
@@ -0,0 +1,103 @@
+# Файлове (част 2). Двоични файлове.
+
+## Режими за работа с файлове
+
+
+| Режим:| Ефект: |
+|--------|------------------------------------------------------------------------------|
+|ios::in |Отваря файл за четене (по подразбиране на ifstream) |
+|ios::out |Отваря файл за четене (по подразбиране на ofstream) |
+|ios::binary | Отваря файл в двоичен режим |
+|ios::trunc | Ако файлът съществува, съдържанието му се изтрива след отваряне на поток |
+|ios::app | Отваря файлът за вмъкване. Поставя put указателят в края. Не се допуска вмъкване преди края на потока |
+|ios::ate | Отваря файлът за вмъкване. Поставя put указателят в края. Допуска вмъкване на прозиволни места |
+|ios::nocreate | Отваря за вмъкване, само ако файлът с указаното име съществува.|
+ios::noreplace | Отваря за вмъкване само ако файлът с указаното име не съществува.|
+### Пример:
+ ```c++
+#include <iostream>
+#include <fstream>
+using namespace std;
+int main()
+{
+ fstream f("test.txt", ios::out | ios::app);
+
+ if (!f.is_open())
+ {
+ cout << "Error while opening file!" << endl;
+ return -1;
+ }
+ f << 33; //appends at the end of the file
+
+ f.close();
+ return 0;
+}
+ ```
+## Флагове на състоянията на потока
+| Флаг:| Значение: |
+|--------|------------------------------------------------------------------------------|
+|bad() | Има загуба на информация. Някоя операция за четене и писане не е изпълнена. |
+|fail() |Последната входно/изходна операция е невалидна.|
+| eof() | Достигнат е края на файла. |
+|good() | Всички операции са изпълнени успешно.|
+|clear()| Изчиства състоянието на потока (Вече good() ще върне истина).|
+
+## Двоични файлове.
+
+Изпоилзваме функциите:
+
+1. .read(char* memoryBlock, size_t size);
+2. .write(const char* memoryBlock, size_t size);
+
+Обърнете внимание, че функцията приема **char***. Ако искаме да запазим променлива от друг вид, ще трябва експлицитно да преобразуваме указателя към тип char* (без значение, че указателят не сочи към елементи от тип char)
+
+### Пример за писане в двоичен файл:
+ ```c++
+#include <iostream>
+#include <fstream>
+
+using namespace std;
+
+int main()
+{
+ ofstream f("file.dat");
+
+ int a = 155555;
+
+ f.write((const char*)&a, sizeof(int));
+
+ return 0;
+}
+ ```
+ ### Пример за четене от двоичен файл:
+
+ ```c++
+#include <iostream>
+#include <fstream>
+
+using namespace std;
+
+int main()
+{
+ ifstream f("file.dat");
+
+ int a;
+
+ f.read((char*)&a, sizeof(int));
+
+ cout << a << endl;
+
+ return 0;
+}
+ ```
+
+ ### Съдържанието на двоичния файл:
+ ![enter image description here](https://i.ibb.co/G3R72qG/sudurjanie.png "Binary file example")
+
+Байтовете се записват в **обратна посока**. Най-старшият байт е последен. Следователно запаментеното число е **00025fa3**, което е точно шестанйсетичния запис на числото **155555**.
+
+
+ ### Позициониране във файл
+TBI
+
+