1. Giriş
Fayl — sadəcə olaraq, hansısa yaddaş qurğusunda (sərt disk, SSD, flash, hətta disketdə də ola bilər — babana salam çatdır!) saxlanılan məlumat blokudur. İstifadəçi üçün fayl — bu elə bir şeydir ki, onu açmaq, oxumaq, dəyişmək və saxlamaq olar.
Proqramlaşdırmada fayl — müəyyən adı və yerləşməsi olan baytlar ardıcıllığıdır, sənin üçün, proqramçı kimi, — bu obyektin adı, ona yol (adres kimi), ölçüsü, yaradılma tarixi və s. var. Ən əsas: fayl — persistənt (davamlı) məlumat saxlayıcısıdır. Proqram işə düşəndən sonra yaddaşda baş verənlər adətən proqram bağlananda yox olur, amma fayl qalır.
Fayl sistemi nədir?
Fayl sistemi — faylların diskdə necə saxlanılması və təşkil olunması üsuludur. O, belə suallara cavab verir: fayl harada və necə tapılır, kim ona giriş edə bilər, qovluqlar (direktoriyalar) necə qurulub, faylın adı və məzmunu necə tapılır.
Təsəvvür elə böyük bir şkaf var, içində bir çox çekmece. Hər çekmecədə qovluqlar, hər qovluqda isə sənədlər (fayllar) ola bilər. Sən C# üzrə konspektini tapmaq üçün şkafı açırsan, lazım olan çekmeceyi tapırsan, qovluğu çıxarırsan və içində axtardığın vərəqi tapırsan. Bax, fayl sistemi informasiyanı belə təşkil edir.
Populyar fayl sistemləri
- NTFS — Windows-un "doğma" fayl sistemi.
- FAT32, exFAT — flash, SD-kart, xarici yaddaşlar üçün.
- EXT4 — Linux-da məşhurdur.
- APFS, HFS+ — macOS üçün.
C# proqramçısı üçün bu adətən vacib deyil: .NET detalları gizlədir, sən isə "fayl/qovluq" abstraksiyası ilə işləyirsən. Amma bəzən nəyisə bilmək faydalıdır. Məsələn, NTFS-də fayl adında boşluq və bir çox xüsusi simvol istifadə etmək olar, FAT32-də isə olmaz.
2. Qovluqlar (direktoriyalar) necə qurulub
Direktoriya (və ya qovluq) — başqa faylların və/və ya direktoriyaların siyahısını saxlayan xüsusi fayl tipidir. Direktoriyalar ağacı (fayl iyerarxiyası) — bu, kökdən fayla gedən tanış yoldur: məsələn, C:\Users\İvan\Documents\MyFile.txt.
- Kök — diskin ən başlanğıcıdır (C:\).
- Daxilində — qovluqlar (altqovluqlar), onların içində fayllar və ya başqa qovluqlar olur.
Sadə vizualizasiya belədir:
C:\
└── Users\
└── İvan\
├── Documents\
│ └── MyFile.txt
└── Pictures\
└── Cat.jpg
3. Fayl yolu (file path) nədir?
Fayl yolu — faylın kataloq ağacında "adresidir". Onun köməyi ilə lazım olan fayl və ya qovluğu dəqiq tapmaq olar.
Mütləq və nisbətən yol
- Mütləq yol: fayl sisteminin kökündən başlayır.
Windows: C:\Users\İvan\Documents\MyFile.txt
Linux/macOS: /home/ivan/Documents/MyFile.txt - Nisbətən yol: cari yerləşmədən (cari direktoriyadan) başlayır.
Məsələn, əgər proqramın C:\Users\İvan qovluğundan işə düşübsə, nisbətən yol Documents\MyFile.txt eyni fayla aparacaq.
Cari direktoriya — xüsusi anlayışdır: bu, bütün nisbətən yollar üçün "başlanğıc nöqtəsidir". Proqram işə düşəndə adətən bu, .exe-faylın olduğu qovluq və ya konsolu açdığın yerdir.
Sxem: Mütləq və nisbətən yol
Mütləq yol Nisbətən yol
C:\Projects\MyApp\logs\output.txt logs\output.txt
└─ Diskin kökü (C:) └─ MyApp-dan nisbətən
Yollarda ayırıcılar: \ və /
Windows-da tərs slash (\), Linux/macOS-da isə adətən düz slash (/) istifadə olunur.
Müasir .NET hər iki variantı dəstəkləyir, amma bir layihədə qarışdırmamağa çalış. Yol qurmaq üçün həmişə xüsusi API (application programming interface) istifadə elə, string-ləri əl ilə birləşdirmə.
4. Proqram faylı necə görür
.NET-də fayllarla işləmək üçün geniş alətlər var. Əsasları bunlardır:
- System.IO.File: faylları tez oxumaq, yazmaq, silmək, mövcudluğunu yoxlamaq və s. üçün statik metodlar.
- System.IO.Directory: qovluqlarla işləmək üçün oxşar metodlar.
- System.IO.FileInfo və System.IO.DirectoryInfo: fayl/qovluq metadatasına çıxış verən obyekt qabıqları.
- System.IO.Path: yollarla işləmək üçün köməkçi class (yolları birləşdirmək, uzantı, ad və s. ayırmaq üçün).
Bir az nümunə
Faylın mövcudluğunu yoxlamaq
using System.IO;
if (File.Exists("data.txt"))
{
Console.WriteLine("Fayl tapıldı!");
}
else
{
Console.WriteLine("Fayl tapılmadı!");
}
Fayl ölçüsünü almaq
var info = new FileInfo("data.txt");
Console.WriteLine($"Faylın ölçüsü: {info.Length} bayt");
Bütün nümunələrin işini yaxın mühazirələrdə izah edəcəyik. İndilik — sadəcə bax və həzz al:).
5. Faydalı nüanslar
Fayl metadatası: ad, uzantı, ölçü, tarixlər və s.
Faylla işləyəndə təkcə məzmun maraqlı olmur — bir də "fayl pasportu" var:
- Ad — faylın insan üçün olan adı.
- Uzantı — .txt, .jpg, .exe, .cs və s.: (bəzən!) içində nə olduğunu başa düşməyə kömək edir.
- Ölçü — baytların sayı.
- Yaradılma/dəyişmə vaxtı — fayl nə vaxt yaranıb və ya sonuncu dəfə nə vaxt dəyişib bilmək olur.
- Atributlar — məsələn: yalnız oxumaq üçün, gizli, sistem faylı və s.
.NET-də bunun üçün FileInfo, DirectoryInfo class-ları çox rahatdır (bu, növbəti mühazirələrdə olacaq).
Fayl uzantıları və formatlar
Fayl uzantısı — sadəcə adın nöqtədən sonrakı hissəsidir. Məsələn, document.txt faylında uzantı txt-dir. Əməliyyat sistemi uzantıdan istifadə edərək faylı hansı proqramla "açmaq" lazım olduğunu başa düşür (məsələn, .jpg — şəkil proqramı, .xls — Excel və s.).
Amma proqramçı üçün uzantı — sadəcə ipucudur. Əsl fayl formatı yalnız məzmunu ilə müəyyən olunur. Məsələn, MyCat.jpg faylını mətn kimi açsan — bir dəstə "krakozyabr" (anlaşılmaz simvollar, heç şəkil deyil) görəcəksən. Ona görə həmişə yadında saxla: uzantı — zəmanət deyil, sadəcə şərtdir.
Fayl oxuma və yazma necə işləyir: əsas anlayışlar
Fayl — baytlar ardıcıllığıdır. C#-da faylla işləmək adətən belə olur:
- Faylı açmaq — oxumaq və ya yazmaq (və ya hər ikisi üçün).
- Oxumaq — məlumatı yaddaşa yükləmək.
- Yazmaq — yeni məlumatı diskə yazmaq.
- Faylı bağlamaq — çox vacibdir, yoxsa sistem resursunu tutub saxlayacaqsan (kim isə bu faylı silə bilməyəcək, sən onu açıq saxlayana qədər).
Müasir .NET API-ləri sənin qayğına qalır: məsələn, File class-ı faylı açır, oxuyur və dərhal bağlayır. Amma stream-lərlə (Stream) və böyük fayllarla işləyəndə buna ciddi yanaşmaq lazımdır (bunu növbəti mühazirələrdə danışacağıq).
Cross-platform barədə nə bilmək vacibdir
Demək olar ki, bütün müasir C# Windows, Linux və macOS-da eyni işləyir. Amma yenə də bəzi nüanslar var. Ən yayılmışı — ayırıcılardakı fərqdir (\ vs /), həmçinin fayl adının uzunluğu və qadağan olunmuş simvollar.
Bax buna görə Path.Combine kimi API-lər və System.IO.Path metodları — sənin ən yaxşı dostundur. Onlar yolu istənilən OS-də düzgün "birləşdirəcək". Heç vaxt belə yazma:
var filePath = "C:\\Users\\Ivan\\data.txt"; // Yalnız Windows üçün!
Daha yaxşı:
var filePath = Path.Combine("Users", "Ivan", "data.txt");
Cari işçi qovluğu necə tapmaq olar?
Bəzən vacibdir bilmək ki, faylların harada saxlanacaq. Bunun üçün xüsusi class var:
string currentDir = Environment.CurrentDirectory;
Console.WriteLine($"Cari direktoriya: {currentDir}");
Yeri gəlmişkən, istifadəçiyə yol seçmək imkanı vermək istəyirsənsə, fayl/qovluq seçimi dialoqları və ya komanda sətri arqumentlərindən istifadə et.
GO TO FULL VERSION