1. Mətn faylları
Xatırla: kompüter hər şeyi, tamamilə hər şeyi bir və sıfır kimi (və ya qorxulu sözlərdən çəkinmirsənsə — baytlar ardıcıllığı kimi) saxlayır. Amma eyni faylı iki fərqli proqrama versən, heç də həmişə eyni reaksiya almayacaqsan. Məsələn, bir proqram onu adi mətn kimi görəcək, digəri isə "korlanmış baytlar" dəstəsi kimi. Bütün məsələ fayl formatında — yəni, bu baytlar dəqiq necə şərh olunur. Format məlumatın daxili strukturunu, oxuma qaydalarını və kodlaşdırmanı təsvir edir. Formatı bilmədən proqram sadəcə başa düşməyə bilər ki, faylda nə saxlanılır.
Mətn faylı — bu, məlumatların adi mətn kimi hansısa kodlaşdırmada (çox vaxt — UTF-8, ya da tam hardcore üçün — ASCII) təqdim olunduğu fayldır. Belə faylın məzmununu istənilən mətn redaktorunda (məsələn, Notepad və ya VS Code) aça və dərhal oxuya bilərsən — bunlar simvol sətirləridir, anlaşılmaz idarəedici baytlar və ya binary strukturlar deyil.
Tipik nümunələr
- *.txt — adi mətn faylları, məsələn "to-do.txt" və ya "best-books.txt".
- *.csv — məlumatların vergül və ya nöqtəli vergüllə ayrıldığı fayllar (cədvəllər üçün rahatdır).
- *.json — strukturlaşdırılmış məlumat mübadiləsi üçün fayllar (məsələn, kitab siyahıları).
- *.xml,*.html — strukturlaşdırılmış məlumatların saxlanması və ötürülməsi üçün.
CSV-fayl nümunəsi
Duna;Frenk Gerbert;1965
1984;Corc Oruell;1949
Master və Marqarita;Mixaıl Bulqakov;1966
Hər sətr — ayrıca bir qeyd (məsələn, kitab). Sətirdəki dəyərlər nöqtəli vergüllə ayrılıb, bu da faylı CSV (Comma-Separated Values) nümunəsinə çevirir. Comma — guya vergül deməkdir, amma burada başqa ayırıcı (;) istifadə olunub. İnsan gördüyü simvollar — proqramın oxuduğu baytlarla eynidir, təki proqram mətn formatını və kodlaşdırmanı düzgün şərh edə bilsin.
Proqram mətn faylı ilə necə işləyir
Sadəcə faylı "mətn kimi" açırsan və sətir-sətir oxuya bilirsən. Nümunə (bu gələcək dərslərdə işinə yarayacaq):
// Fayldan sətirləri sadə oxuma (detalları tezliklə öyrənəcəyik)
string[] lines = File.ReadAllLines("books.txt");
foreach (string line in lines)
{
Console.WriteLine(line);
}
Mətn fayllarının üstünlükləri
- İnsan üçün oxunaqlıdır (human-readable).
- Əl ilə asanlıqla düzəldilə bilər (hətta ən sadə Notepad tipli proqramda).
- Debug və müxtəlif sistemlər arasında mübadilə üçün əladır.
- Fərqli platformalar arasında asanlıqla köçürülə bilər (Windows, Linux, Mac).
Mətn fayllarının çatışmazlıqları
- Sərt struktur yoxdur (txt), format səhvləri təsadüfən asanlıqla daxil edilə bilər.
- Daha çox yer tutur (məsələn, 12345 rəqəmi = 5 bayt, binary-də isə 4).
- Çətin məlumatları (məsələn, şəkil, audio) mətnlə ötürmək narahat və ya mümkün deyil.
- Performans: böyük həcmdə məlumat üçün yavaşdır.
Bilmək faydalıdır
- Fərqli platformalar "sətir sonu"nu fərqli başa düşür: Windows — \r\n, Unix — \n.
- Kodlaşdırmalar fərqli ola bilər (UTF-8, UTF-16, ANSI və s.), yəni bir sistemdə yazılmış fayl başqa sistemdə "çin heroqlifləri" kimi görünə bilər (əslində bu, baytların səhv şərhidir).
2. Binary fayllar
Binary fayl — bu, içində simvollar yox, istənilən baytlar saxlanılan fayldır. Onlar istənilən şeyi ifadə edə bilər: rəqəmlər, strukturlar, şəkillər, musiqi, hətta maşın kodu. .exe faylını Notepad-da açmağa çalış — bir dəstə anlaşılmaz abrakadabra görəcəksən!
Tipik nümunələr
- *.exe, *.dll — icra olunan fayllar və kitabxanalar.
- *.jpg, *.png, *.gif— şəkillər.
- *.mp3, *.wav— audio fayllar.
- *.dat — istənilən istifadəçi məlumatı olan fayllar.
- Tətbiqlərə məxsus formatlar (*.docx, *.xlsx və s.) — demək olar ki, həmişə binary olur.
Binary fayl necə qurulub?
Bayt-bayt proqram lazım olan formatda məlumat yazır və oxuyur. Məsələn, int tipli rəqəm 4 bayta (32 bit) yazılır, sətir isə adətən uzunluq + simvolların baytları (müəyyən kodlaşdırmada) kimi saxlanılır.
Mətn faylında 12345 rəqəmi — '1', '2', '3', '4', '5' simvollarına uyğun baytlardır:
| Simvol | UTF-8 kodu |
|---|---|
| 1 | 49 |
| 2 | 50 |
| 3 | 51 |
| 4 | 52 |
| 5 | 53 |
Binary faylda int 12345 (little-endian, yəni kiçik bayt əvvəl) belə olacaq:
| Pozisiya | Bayt (hex) | Dəyər |
|---|---|---|
| 0 | 0x39 | 57 |
| 1 | 0x30 | 48 |
| 2 | 0x00 | 0 |
| 3 | 0x00 | 0 |
(Başqa sözlə: 12345 = 0x00003039.)
Eyni rəqəmi mətn və binary şəkildə yazmağa çalış — fayl ölçüsünü müqayisə et. Binary bir az daha kiçik olacaq.
Proqram binary faylla necə işləyir
Xüsusi stream-lər (məsələn, BinaryReader, BinaryWriter). Mətn faylından fərqli olaraq, strukturu dəqiq bilməlisən, yoxsa məlumatı oxuya bilməyəcəksən.
// Rəqəmləri binary fayla yazmaq nümunəsi
var writer = new BinaryWriter(File.Open("books.bin", FileMode.Create));
// Tutaq ki, kodlaşdırmanı yazırıq: simvol sayı (int), sonra baytlar
string title = "Duna";
writer.Write(title.Length); // Uzunluğu yazdıq (int)
writer.Write(title); // Sətiri yazdıq (UTF-8 olacaq)
writer.Write(1965); // İli yazdıq (int)
writer.Close(); // stream-i bağlayırıq
Bu sadəcə nümunədir. Binary fayllarla işləməyi yaxın dərslərdə daha ətraflı danışacağam.
Binary faylların üstünlükləri
- Kompaktlıq: daha az yer tutur.
- Böyük həcmdə məlumat üçün daha sürətli oxunur və yazılır.
- Çətin strukturları saxlamaq olar: massivlər, iç-içə obyektlər və s.
Binary faylların çatışmazlıqları
- İnsan üçün oxunmazdır (human-unreadable).
- Fayl strukturu dəyişsə, köhnə məlumat itə və ya "korlana" bilər.
- Məzmunu oxumaq üçün həmişə dəqiq təlimat lazımdır.
3. Hansı formatı seçmək?
Mətn vs Binary fayllar
| Kriteriya | Mətn faylı | Binary fayl |
|---|---|---|
| İnsan üçün oxunaqlıdır | Bəli | Xeyr |
| Ölçü | Daha böyük | Daha kiçik |
| Universallıq | Yüksək (istənilən redaktor) | Yalnız xüsusi proqramlar |
| Sürət | Daha yavaş | Daha sürətli |
| Formatın sərtliyi | Yox | Bəli, mütləq riayət olunmalı |
| Strukturların saxlanması | Çətindir | Asandır |
| Məlumatın korlanma riski | Aşağı (asanca düzəldilə bilər) | Yüksək (kiçik səhv — fayl oxunmur) |
Seçim kriteriyaları
- Məlumat insan üçün oxunaqlı, asan dəyişən və debug üçün rahat olmalıdır? — Mətn faylı istifadə et (.txt, .csv, .json kimi).
- Məlumat çətindirsə, ölçü və sürət vacibdirsə? — Binary format.
- Fərqli platformalar arasında məlumat mübadiləsi lazımdır? — Mətn üstünlükdür, amma kodlaşdırma standart olmalıdır (UTF-8).
- Tətbiq çoxlu məlumat oxuyub-yazacaq və format sərtdirsə? — Binary seç.
Bizim konsol tətbiqində «Kitab siyahısı» ilk mərhələdə mətn formatı (.csv və ya .txt) üçün idealdır. Sonra, struktur çətinləşəndə və ya yükləmə sürətini artırmaq istəyəndə binary faylları və ya JSON/XML formatını öyrənə bilərik.
4. Faydalı nüanslar
Həyatda mətn və binary fayllar harada rast gəlinir?
Mətn faylları:
- Proqram ayarları (çox vaxt .ini və ya .json).
- Skriptlər, loglar, qeydlər.
- İdxal/ixrac faylları (tətbiqlər arasında məlumat mübadiləsi üçün).
Binary fayllar:
- Proqramlar, oyunlar, kitabxanalar (orada heç kim sadəcə baxmır).
- Böyük verilənlər bazaları və arxivlər (məsələn, .mdb, .zip).
- Media: musiqi, şəkil, video.
Bütün faylı bir anda oxumaq (mətn kimi):
string allText = File.ReadAllText("books.txt");
// İndi allText — bütün məzmunu olan böyük bir sətirdir
Sətir-sətir (siyahılar üçün optimal):
string[] lines = File.ReadAllLines("books.txt");
foreach (string line in lines)
{
// Sətiri hissələrə bölmək olar
string[] parts = line.Split(';');
// parts[0] — ad, parts[1] — müəllif, parts[2] — il
}
Binary oxuma — struktur üzrə dəqiq
var reader = new BinaryReader(File.Open("books.bin", FileMode.Open));
int count = reader.ReadInt32(); // Neçə kitab var
for (int i = 0; i < count; i++)
{
string title = reader.ReadString();
string author = reader.ReadString();
int year = reader.ReadInt32();
// İndi qeydi bərpa edə bilərik!
}
reader.Close();
5. Praktik nümunə: kitablarla fayl yaradırıq
Məlumatı mətn faylına saxlayırıq
Hər kitabı belə bir sətirdə saxlayacağıq:
ad;müəllif;ilk nəşr ili
// Saxlamaq istədiyimiz kitab siyahısı
var books = new List<(string Title, string Author, int Year)>
{
("Duna", "Frenk Gerbert", 1965),
("1984", "Corc Oruell", 1949),
("Master və Marqarita", "Mixaıl Bulqakov", 1966)
};
// Mətn faylına saxlayırıq
var writer = new StreamWriter("books.txt");
foreach (var book in books)
writer.WriteLine($"{book.Title};{book.Author};{book.Year}");
writer.Close();
books.txt faylını Notepad-da açıb bütün məlumatı görə bilərsən.
Məlumatı binary faylda saxlayırıq
İndi isə eyni şeyi daha kompakt (amma insan üçün oxunmaz) şəkildə edək:
var writer = new BinaryWriter(File.Open("books.bin", FileMode.Create));
writer.Write(books.Count); // Kitab sayını yazırıq
foreach (var book in books)
{
writer.Write(book.Title); // Sətir - saxlanacaq: uzunluq + baytlar
writer.Write(book.Author); // Sətir
writer.Write(book.Year); // İl (int)
}
writer.Close();
Əgər books.bin faylını mətn redaktorunda açmağa çalışsan, xaos görəcəksən: oxunmaz simvollar dəstəsi. Bu normaldır. Binary fayllar insan üçün oxumağa deyil — yalnız faylın necə yazıldığını dəqiq bilən proqram onu düzgün işləyə bilər.
6. Formatlarla işləyərkən tipik səhvlər
Əgər binary faylı mətn kimi oxumağa çalışsan, "qarışıq" simvollar və ya ümumiyyətlə səhv alacaqsan. Eyni ilə, mətn faylını binary kimi açıb sərt struktur gözləsən — problemlər olacaq.
Ən çox rast gəlinən səhv: məlumat strukturu və oxuma/yazma ardıcıllığının uyğun gəlməməsi. Məsələn, əvvəl ili, sonra adı yazdın, amma oxuyanda əksinə — düzgün məlumat almayacaqsan. Həmişə eyni əməliyyat ardıcıllığına riayət et!
Proqramçılar çox vaxt mətn faylına "baxırlar", saxlanma və yükləmə məntiqini yoxlayırlar — məhz buna görə mətn formatları ilk addımlarda rahatdır. Binary isə daha inkişaf etmiş ssenarilər və ya istifadəçidən saxlama detallarını gizlətmək lazım olanda uyğundur.
GO TO FULL VERSION