1. Giriş
Fayl sadə bir şey kimi görünə bilər və onu yaratmaq çox asandır: məsələn, Windows-da sağ klik etmək yetər. Amma real layihələrdə proqram vasitəsilə faylların yaradılması və silinməsi avtomatlaşdırma və çeviklik üçün əsasdır. Məsələn:
- Mətn redaktorunda istifadəçi «Yadda saxla» basır — və sizin kod yeni fayl yaradır, şairin əməyini ora yazacaq.
- Tədbir loglama xidməti tətbiq işə düşəndə avtomatik log faylları yaradır.
- Arxivator və ya backup-utiliti mütəmadi olaraq müvəqqəti fayllar yaradıb sonra onları silir.
- C# oyun tətbiqi autosave edir — save-faylı yaradır və ya üzərinə yazır.
- Və ya siz (və ya skriptiniz) köhnə müvəqqəti faylları avtomatik təmizləyirsiniz ki, disk dolaşıqlanmasın.
Faylları avtomatik yaratmağı və silməyi bilmək müasir .NET-proqramçısı üçün əsas bacarıqlardan biridir.
2. Statik File üzərindən sürətli əməliyyatlar
Fayl yaratmaq
C#-da faylı müxtəlif yollarla yarada bilərsiniz. Ən sürətli və sadə yol — statik sinifdən istifadə etmək: File. Gəlin sınayaq:
// Cari direktoriyada boş "myfile.txt" faylı yaradacağıq
File.Create("myfile.txt").Close(); // FileStream-i bağlamaq lazımdır!
Console.WriteLine("Fayl 'myfile.txt' yaradıldı.");
Vacib nüans:
Metod File.Create FileStream obyektini qaytarır, onu bağlamaq (Close()) lazımdır ki, əməliyyat sistemi faylın "işlənir" olduğunu deməsin. Bu bağlanma olmadan həmin faylla başqa əməliyyatlar gözlənilmədən işləməyə bilər. Bu əfsanəvi klassika: "Fayl başqa proses tərəfindən istifadə olunur", amma həmin "başqa proses" əslində sizin proqramınızdır, sadəcə axını bağlamamısınız.
Əgər fayl artıq mövcud idisə, File.Create onu yenidən yazacaq (köhnə silinir, yeni boş yaradılır). Əgər yoxdursa — fayl yaranacaq.
Boş fayldan nə fayda?
Adətən yeni fayl boş bir ziynət kimi deyil, ora nəsə yazmaq üçün lazımdır. Bunun üçün rahat metodlar var:
File.WriteAllText("welcome.txt", "Salam, fayllar dünyası!"); Bu əmri faylı yaradacaq, içindəki sətri yazacaq və faylı gözəl şəkildə bağlayacaq ki, problem olmasın.
Faylın mövcudluğunu yoxlamaq
Yeni fayl yaratmazdan əvvəl yoxlamaq yaxşıdır, bəlkə artıq mövcuddur. Əks halda təsadüfən vacib bir şeyi silə bilərsiniz.
if (!File.Exists("important.txt"))
{
File.WriteAllText("important.txt", "Vacib məlumatı yadda saxlayırıq.");
Console.WriteLine("Fayl yaradıldı.");
}
else
{
Console.WriteLine("Belə bir fayl artıq var, başqa variant tapmaq olar!");
}
3. Həyatdankənar nümunə: "İstifadəçinin salamını yadda saxlayırıq"
Console.Write("Adınızı daxil edin: ");
string name = Console.ReadLine();
string filename = $"{name}_greeting.txt";
string message = $"Xoş gəldiniz, {name}!";
// Belə bir fayl var mı yoxlayırıq
if (!File.Exists(filename))
{
File.WriteAllText(filename, message);
Console.WriteLine($"Şəxsi salam faylı {filename} yaradıldı.");
}
else
{
Console.WriteLine($"Fayl {filename} artıq mövcuddur! Yenidən yazmaq? (y/n)");
string answer = Console.ReadLine();
if (answer?.ToLower() == "y")
{
File.WriteAllText(filename, message);
Console.WriteLine($"Fayl {filename} yenidən yazıldı.");
}
else
{
Console.WriteLine("Hər şeyi olduğu kimi saxlayırıq.");
}
}
Burada nə edirik:
- Faylın mövcudluğunu yoxlayırıq (File.Exists).
- Əgər yoxdursa — yaradırıq və yazırıq (File.WriteAllText).
- Əgər varsa — istifadəçidən soruşuruq, yenidən yazmaq istəyir yoxsa yox.
4. Faylın silinməsi
C#-da faylları silmək demək olar ki, hacker işi kimi hiss olunur... amma təhlükəsiz! Burada da sadədir:
File.Delete istifadə edirik
File.Delete("myfile.txt");
Əgər fayl yoxdursa — dram yoxdur! Sadəcə heç nə olmayacaq (yol düzgün daxil edilibsə, xəta yaranmayacaq).
Yeni başlayanlar üçün tələlər
- Əgər fayl artıq sizin proqram tərəfindən (və ya başqa kimsə tərəfindən) açılıbsa, istisna atılacaq.
- Əgər yol səhv daxil edilibsə — ArgumentException çıxacaq.
Tövsiyə: həmişə mövcudluğu yoxlayın
if (File.Exists("victim.txt"))
{
File.Delete("victim.txt");
Console.WriteLine("Fayl silindi.");
}
else
{
Console.WriteLine("Silinəcək heç nə yoxdur — belə bir fayl tapılmadı.");
}
5. Qovluqlar və fayllar: fayl strukturu yaradırıq
Qovluqda fayl yaratmaq
string folder = "Data";
Directory.CreateDirectory(folder); // qovluq yoxdursa yaradılacaq
string filename = Path.Combine(folder, "info.txt");
File.WriteAllText(filename, "Burada gizli mesaj saxlanılır!");
Vacib: Mövcud olmayan qovluqda fayl yaratmağa çalışanda istisna atılacaq. Buna görə əvvəlcə Directory.CreateDirectory(folder) çağırmaq düzgün davranışdır. O, əgər qovluq artıq varsa yenidən yaratmayacaq, ona görə çağırmaq təhlükəsizdir.
6. Nümunələr üzərində iş: FileInfo
"Old-school" və bir az daha inkişaf etmiş ssenarilər üçün FileInfo sinfi faydalıdır:
FileInfo fi = new FileInfo("example.txt");
// Yeni fayl yaratmaq (File.Create kimi — boş fayl yaradır)
using (var fs = fi.Create())
{
// istəsəniz nəsə yaza bilərsiniz
}
Console.WriteLine($"'example.txt' faylı FileInfo vasitəsilə yaradıldı.");
FileInfo ilə silmə:
FileInfo fi = new FileInfo("oldfile.txt");
if (fi.Exists)
{
fi.Delete();
Console.WriteLine("Fayl FileInfo ilə silindi.");
}
FileInfo üstünlükləri
Əgər siz yalnız yaratmaq/silmək deyil, faylın xüsusiyyətlərinə tez-tez müraciət etmək və ya onunla müxtəlif əməliyyatlar aparmaq niyyətindəsinizsə, nümunə-yanaşma rahatlıq (və bəzən performans) baxımından üstünlük verir.
7. "Texniki faylları" yaradırıq və təmizləyirik
Tutaq ki, tətbiqimiz müvəqqəti faylları "temp_data" qovluğunda toplayır və biz bu qovluqdakı adları "temp_" ilə başlayan bütün faylları silmək istəyirik.
string tempFolder = "temp_data";
Directory.CreateDirectory(tempFolder);
for (int i = 1; i <= 5; i++)
{
string tempFile = Path.Combine(tempFolder, $"temp_{i}.txt");
File.WriteAllText(tempFile, $"Test məlumatları {i}");
}
Console.WriteLine("5 müvəqqəti fayl yaradıldı.");
// İndi temp_*.txt hamısını silək
foreach (string file in Directory.GetFiles(tempFolder, "temp_*.txt"))
{
File.Delete(file);
Console.WriteLine($"Silindi: {file}");
}
Avtomatik köhnə və müvəqqəti faylların təmizlənməsi üçün əla işləyir.
8. Vacib detallər: istisnalar və təhlükəsizlik
Nə səhv gedə bilər:
- Qovluqda yazmaq/silmək üçün icazə yoxdur (məsələn, C:\Windows)
- Fayl başqa bir proqram (və ya sizin proqramınız!) tərəfindən istifadə olunur
- Yol icazə verilməyən simvollar məzmunudur (məsələn, *?<>)
- Fayl sizin yoxlamanız ilə silmə əməliyyatı arasında başqa proses tərəfindən silinir (bəli, belə hallar olur!)
Necə qorunmaq olar
"İstehsalat" kodunda belə əməliyyatları həmişə try-catch blokuna almaq lazımdır:
try
{
File.Delete("trickyfile.txt");
Console.WriteLine("Fayl silindi.");
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine("Faylı silmək üçün icazəniz yoxdur.");
}
catch (IOException ex)
{
Console.WriteLine("Fayl başqa proses tərəfindən istifadə edilə bilər.");
}
catch (Exception ex)
{
Console.WriteLine($"Xəta: {ex.Message}");
}
9. Faydalı nüanslar
Həmişə nəzarətdə saxlanılan fayllar
- Yolları birləşdirmək üçün Path.Combine istifadə edin. Bu halda əlavə və ya əskik slash-larla bağlı problem olmayacaq və kodunuz kross-platform olacaq.
- Fayl yaratmazdan/silmədən əvvəl mövcudluğu yoxlayın, sürpriz istəmirsinizsə.
- Kodunuzu try-catch ilə sarıyın, əgər istehsalatda və xüsusən çoxistifadəçili tətbiqdə işləyirsinizsə.
- Tez-tez eyni fayl üzərində əməliyyatlar üçün FileInfo istifadə edin, birdəfəlik əməliyyat üçün isə — File.
- Faylları lazım olduğundan uzun müddət açıq saxlamayın. Faylınız açıqdır? Özünüzdən soruşun: "Niyə?" və onu bağlayın! Mümkün olduqda using istifadə edin.
Texniki xülasə
| Əməliyyat | Metod | Qeyd |
|---|---|---|
| Boş fayl yaratmaq | |
FileStream qaytarır, onu bağlamaq lazımdır |
| Fayla mətn yazmaq | |
Faylı yaradır və ya üzərinə yazır |
| Mövcudluğu yoxlamaq | |
bool qaytarır |
| Faylı silmək | |
Fayl yoxdursa istisna atmır |
| Qovluqda fayl yaratmaq | |
Qovluğu təmin edir |
| FileInfo ilə iş | |
Çoxlu əməliyyatlar üçün |
10. Fayllarla işləyərkən tipik səhvlər
Səhv №1: File.Create-dən sonra axını bağlamağı unutmaq.
Bir çox yeni başlayanlar File.Create ilə fayl yaradır, amma qaytarılan axını bağlamırlar. Nəticədə digər kod faylı "görmür" — guya o paralel aləmə keçib. Axını açıq buraxmayın; onu açıq şəkildə bağlayın (Close()) və ya using konstrukiyasından istifadə edin.
Səhv №2: mövcud olmayan qovluqda fayl yaratmağa çalışmaq.
Tipik tələlərdən biri — hələ mövcud olmayan direktoriyada fayl yaratmağa çalışmaqdır. Unutmayın ki, əvvəlcə Directory.CreateDirectory çağırmaq lazımdır. Bu tamamilə təhlükəsizdir: əlavə şeylər yaratmayacaq, lazım olan qovluğu yaradacaq.
Səhv №3: faylı yoxlamadan silmək.
Bəzən insanlar sadəcə File.Delete çağırıb mövcudluğu yoxlamırlar. Bu icazəlidir — metod fayl yoxdursa səhv vermir. Amma yol səhvdirsə və ya icazə yoxdursa — istisna alacaqsınız. Əvvəlcədən yoxlamaq və ya istisnaları tutmaq daha yaxşıdır.
Səhv №4: File.Delete ilə Directory.Delete-i qarışdırmaq.
File.Delete yalnız fayllar üçün işləyir, Directory.Delete isə qovluqlar üçün. Qovluğu File.Delete ilə silməyə çalışmaq, diş fırçası ilə kərpic parlatmağa bənzəyir: texniki cəhətdən cəhd edilə bilər, amma məntiqli deyil.
GO TO FULL VERSION