31.10. Rad sa BINARNIM datotekama (fajlovima)
U programiranju često želimo da sačuvamo podatke kako bi ostali dostupni i nakon što se program završi.
To se radi pomoću datoteka (fajlova).
U datoteke možemo upisivati i iz njih čitati različite vrste podataka.
Najčešće se koriste dve vrste datoteka:
-
Tekstualne datoteke – podaci se čuvaju kao običan tekst (čovek može da ih pročita u Notepadu).
-
Binarne datoteke – podaci se čuvaju u obliku bajtova (računar ih razume, ali čovek ne).
Primeri iz stvarnog života
-
Tekstualni fajl može biti spisak učenika, dnevnik, ili rezultati testova.
-
Binarni fajl može biti slika, audio zapis, ili čuvanje podataka o objektima u programu (npr. igra čuva stanje).
Binarne datoteke
Binarne datoteke čuvaju podatke u obliku bajtova (npr. slike, zvuk, strukture). Takve datoteke ne možemo čitati kao običan tekst.
🗂️ Primer : brojevi.dat
Ovde ćemo koristiti datoteku „brojevi.dat“ kao primer binarne datoteke.
Za razliku od tekstualne datoteke (npr. podaci.txt), binarna datoteka ne sadrži čitljiv tekst, već podatke zapisane u obliku bajtova.
To znači da se brojevi ne čuvaju kao cifre „1“, „2“, „3“… već kao njihova binarna predstava koju računar razume.
📗 U C jeziku
Koristimo fwrite() i fread().
🔹 Primer: upis i čitanje brojeva
#include <stdio.h>
int main() {
int i;
FILE *fajl = fopen("brojevi.dat", "wb"); // write binary
int niz[3] = {10, 20, 30};
fwrite(niz, sizeof(int), 3, fajl);
fclose(fajl);
// Čitanje
fajl = fopen("brojevi.dat", "rb"); // read binary
int ucitano[3];
fread(ucitano, sizeof(int), 3, fajl);
fclose(fajl);
for (i = 0; i < 3; i++)
printf("%d ", ucitano[i]);
return 0;
}
📄 Objašnjenje:
-
"wb"znači write binary,"rb"znači read binary. -
fwrite()upisuje podatke iz memorije u datoteku. -
fread()ih ponovo čita nazad.
Nakon pokretanja programa pokušati otvoriti fajl koji je kreiran (nalazi se tamo gde i vaš projekat).
🔹 Objašnjenje (C):
int niz[3] = {10, 20, 30};
fwrite(niz, sizeof(int), 3, fajl);
Brojevi 10, 20 i 30 upisuju se u datoteku brojevi.dat kao niz bajtova, npr:
00001010 00010100 00011110 ...
(kod realnog prikaza to su nečitljivi simboli).
Ako pokušamo da otvorimo datoteku brojevi.dat u Notepadu, videćemo samo nasumične znakove, jer Notepad pokušava da prikaže bajtove kao slova.
Predlog: Otvorite fajl pomoću: Online binary file viewer
📗 U C# jeziku
Koriste se klase BinaryWriter i BinaryReader.
🔹 Primer: upis i čitanje brojeva
using System;
using System.IO;
// namespace ...
class Program {
static void Main() {
int[] brojevi = { 10, 20, 30 };
// Upis u binarnu datoteku
using (BinaryWriter bw = new BinaryWriter(File.Open("brojevi.dat", FileMode.Create))) {
foreach (int x in brojevi)
bw.Write(x);
}
// Čitanje iz binarne datoteke
using (BinaryReader br = new BinaryReader(File.Open("brojevi.dat", FileMode.Open))) {
while (br.BaseStream.Position < br.BaseStream.Length)
Console.Write(br.ReadInt32() + " ");
}
}
}
📄 Objašnjenje:
-
BinaryWriter.Write()upisuje podatke kao bajtove. -
BinaryReader.ReadInt32()čita jedan po jedan broj iz fajla.
🧩 Dodatni zadatak: Istražiti datoteku brojevi.dat
-
Pokrenuti program koji upisuje brojeve u binarnu datoteku brojevi.dat.
-
Zatim pronaći datoteku u folderu projekta i otvoriti je u programu Notepad (ili bilo kom uređivaču teksta).
-
Šta vidite u datoteci?
-
Odgovoriti na pitanja:
-
Da li vidite brojeve 10, 20 i 30 kao tekst?
-
Kako izgledaju podaci u datoteci?
-
Zašto ih računar ipak može tačno pročitati nazad u programu?
-
U čemu je razlika između otvaranja datoteke „brojevi.dat“ i „podaci.txt“?
-
✅ Rešenje (objašnjenje):
-
U datoteci neće se videti brojevi 10, 20, 30 — umesto njih biće nečitljivi simboli, jer su upisani u binarnom obliku.
-
Podaci izgledaju kao nasumični znaci (npr. ▒☺♦), zato što ih Notepad pokušava prikazati kao slova, a oni to nisu.
-
Računar čita binarnu datoteku po bajtovima i zna kako da svaki bajt pretvori nazad u broj.
-
„brojevi.dat“ je binarna datoteka (računarski čitljiva), dok je „podaci.txt“ tekstualna datoteka (čovek može da je čita).