1. Giriş
Niyə fayl və ya qovluğun mövcudluğunu yoxlamaq vacibdir?
Təsəvvür edin ki, siz gündəlik yazırsınız və tətbiqiniz fayla yeni qeyd əlavə etməlidir. Hər şey yaxşı gedir, əgər fayl mövcuddursa. Amma fayl təsadüfən silinibsə, proqram xəta verəcək və sizin həyatın mənası barədə və ya ən pis halda hava haqqında bütün dərin fikirləriniz itə bilər. Eynilə, yeni fayl yaratmaq istəyirsinizsə və heç nəyi itirmək istəmirsinizsə, belə bir faylın artıq olmamasına əmin olmaq lazımdır.
Real tətbiqlərdə — xüsusən korporativ və sənaye inkişafında — fayl və qovluqların mövcudluğunu əvvəlcədən yoxlamaq istifadəçi səhvlərindən və kritik nasazlıqlardan qaçmağa kömək edir, komandaya vaxt və enerji qənaət etdirir və əlavə baş ağrısından xilas edir.
.NET-də fayl sistemi ilə işləmək
.NET platformasında fayl və qovluqlarla işləmək üçün əsas siniflərə ehtiyacımız var (bunlar System.IO namespace-də yaşayır):
- File — fayllarla işləmək üçün static metodlar: yoxlamalar, copy, delete və s.
- Directory — qovluqlarla işləmək üçün static metodlar.
Mövcudluğu yoxlamaq üçün iki metod kifayətdir:
- File.Exists(path) — fayl mövcuddursa true qaytarır.
- Directory.Exists(path) — qovluq mövcuddursa true qaytarır.
2. Faylı açmazdan əvvəl mövcudluğunu yoxlama
Həyatdan nümunə
Farz edin ki, siz gündəlik məzmununu göstərən funksiyanı əlavə etmisiniz:
string diaryPath = "diary.txt";
if (File.Exists(diaryPath))
{
// Fayl mövcuddur, oxuyub məzmunu göstəririk
using var reader = new StreamReader(diaryPath);
string content = reader.ReadToEnd();
Console.WriteLine("Sizin gündəlik:\n" + content);
}
else
{
Console.WriteLine("Gündəlik faylı tapılmadı!");
// Lazımdırsa dərhal yeni fayl yarada bilərsiniz
File.WriteAllText(diaryPath, "Bu sizin gündəlikinizin başlanğıcı.\n");
Console.WriteLine("Yeni gündəlik faylı yaradıldı.");
}
Real layihələrdə belə yanaşma must-have-dir: siz "möcüzələrə" bel bağlamırsınız, vəziyyəti özünüz idarə edirsiniz.
3. Yazmazdan əvvəl faylın mövcudluğunu yoxlama
Ssenari: tətbiq cədvələ əsasən hesabatlar yaradır. Hər yeni hesabat əvvəlkinin üzərinə yazmamalıdır.
Bunun üçün yoxlamaq faydalıdır: bəlkə fayl artıq mövcuddur? Əgər belədirsə — istifadəçidən başqa ad daxil etməsini xahiş etmək və ya unikal adla fayl yaratmaq olar.
string reportPath = "report.txt";
if (File.Exists(reportPath))
{
Console.WriteLine($"Fayl '{reportPath}' artıq mövcuddur. Köhnə faylı dəyişdirin və ya silin.");
}
else
{
using var writer = new StreamWriter(reportPath);
writer.WriteLine("Bu bugünkü yeni hesabatdır!");
Console.WriteLine("Hesabat faylı uğurla yaradıldı.");
}
Belə yoxlama istifadəçilərinizi (və özünüzü!) faylların üst-üstə yazılması kimi xoşagəlməz sürprizlərdən qoruyacaq.
4. Yazmazdan əvvəl qovluğun mövcudluğunu yoxlama
Fayllar nadir hallarda layihənin kökündə yerləşir. Onları tez-tez xüsusi direktoriyalarda saxlayırlar: logs/, reports/, data/ və s. Faylı yazmazdan əvvəl lazım olan qovluğun olub-olmadığını yoxlamaq lazımdır.
string logsDir = "logs";
string logPath = Path.Combine(logsDir, "log.txt"); // Path.Combine yol hissələrini təhlükəsiz birləşdirməyə kömək edir
if (!Directory.Exists(logsDir))
{
Console.WriteLine("‘logs’ qovluğu tapılmadı. Yaradılır...");
Directory.CreateDirectory(logsDir);
}
using var writer = new StreamWriter(logPath, append: true);
writer.WriteLine($"[{DateTime.Now}] Proqram işə düşdü.");
Console.WriteLine("Jurnal faylına yazıldı.");
Qeyd edək ki, Directory.CreateDirectory qovluq artıq mövcud olsa belə xəta atmayacaq — sadəcə bunu görməzdən gəlir, ona görə də yoxlamanı atmaq olar, əgər belə stil sizə uyğundursa.
5. Vacib nüanslar
Xüsusiyyətlər: nisbi və tam yollar
Yeni başlayanların tez-tez etdikləri səhv: nisbi və tam yolları qarışdırırlar. Məsələn, əgər siz File.Exists("data.txt") yazırsınızsa, proqram faylı indiki iş qovluğunda axtaracaq. Haradadır bu? Bu, tətbiqin hardan işə salındığından asılıdır.
Məsuliyyət üçün tam yollar istifadə edin və ya yolu Path.Combine vasitəsilə qurun:
string myDocs = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string filePath = Path.Combine(myDocs, "myapp", "settings.txt");
Beləliklə, yol açıq-aydın göstərilmiş olur və faylı itirməzsiniz.
Yoxlamanın vacib detalları
- Bəzən yoxlama edilir, amma dərhal sonra eyni fayl/qovluq üzərində təkrar əməliyyatlar aparılır. File.Exists ilə sonrakı yaradılma/silmə əməliyyatı arasında vaxt keçə bilər və başqa proses vəziyyəti dəyişə bilər. Kritik ssenarilərdə try-catch ilə səhv emalını əlavə edin.
- Yalnız mövcudluğu yoxlamayın, icazələri də yoxlayın. Fayl ola bilər, amma istifadəçinin ona giriş icazəsi olmaya bilər.
- Kataloqlar üçün Directory.Exists istifadə edin, File.Exists yox — əks halda həmişə false alacaqsınız.
- Əgər yol bir neçə daxili qovluqdan ibarətdirsə, məsələn "data/2024/04", onda Directory.CreateDirectory("data/2024/04") bütün zənciri yaradacaq — bu rahatdır və əlavə yoxlamalardan azad edir.
Yoxlamasanız nə olar?
Əgər mövcud olmayan faylı oxumaq üçün açmağa çalışsanız — FileNotFoundException alacaqsınız. Mövcud olmayan qovluqda fayl yaratmağa çalışsanız — DirectoryNotFoundException. Əgər proqram adi istifadəçi adı altında işləyirsə, o, xətanı görüb əsəbiləşəcək. Sənayedə isə məlumat, pul və vaxt itirə bilərsiniz. Ona görə də "mövcudluğu yoxlamaq" tərs düşüncə deyil, istifadəçi və öz nevroloji sakitliyinizə qayğıdır.
GO TO FULL VERSION