1. Giriş
Niyə ümumiyyətlə Path klassına ehtiyac var?
Fayllarla işləmək üçün onların yolları ilə işləmək vacibdir. Yol proqramaya göstərir ki, lazım olan faylı və ya qovluğu harada axtarmalı.
Gündəlik həyatda sizin ünvanınız var: şəhər [Şəhərin adı], küçə [Küçənin adı], ev [Ev nömrəsi]. Kompüter üçün faylın yolu təxminən belə görünür:
"C:\Program Files\MyApp\data.txt"
və ya əgər cross-platform tərəfdarisinizsə:
"/home/username/documents/data.txt"
Amma problem budur: müxtəlif OSlər fərqli separatorlardan istifadə edir, uzunluq məhdudiyyətləri və ya icazə verilən simvollar fərqli ola bilər. Hətta istifadəçi yol daxil edərkən səhv edə bilər: hamı Windowsdakı ikiqat backslash-lardan (\\) və ya Unix-lərdə yolun / ilə başlamasından xəbərdar deyil.
Velosiped düzəltməmək üçün .NET xüsusi bir statik klass təqdim edir — System.IO.Path, hansı ki yolların parçalanması, dəyişdirilməsi və birləşdirilməsini öz üzərinə götürür. Gəlin bu super qəhrəmanla yaxından tanış olaq!
Path tərəfindən həll edilən əsas vəzifələr
- Faylın uzantısını almaq.
- Tam yoldan faylın və ya direktoriyanın adını çıxarmaq.
- Parçalardan absolut və nisbət yolları qurmaq.
- Yolun həmin OS üçün etibarlı olub-olmadığını yoxlamaq.
- Faylın uzantısını dəyişmək.
- Baza direktoriyanı və valideyn qovluqları müəyyən etmək.
- Yolların separatorları ilə cross-platform işləmək.
- Müvəqqəti fayl və qovluqlarla işləmək.
Cədvəl: Pathın əsas metodları və xassələri
| Metod/Xassə | İşi |
|---|---|
|
Uzanma ilə fayl adı |
|
Faylın uzantısı (məsələn, .txt) |
|
Faylın yerləşdiyi qovluğun yolu |
|
Uzanma olmadan fayl adı |
|
Yol elementlərini diqqətlə və cross-platform uyğun birləşdirir |
|
Faylın uzantısını dəyişir |
|
Absolut yol |
|
Yolda qadağan olunmuş simvollar |
|
Adın daxilində qadağan olunmuş simvollar |
|
Müvəqqəti fayllar üçün qovluğun yolu |
|
Müvəqqəti fayl yaradır və onun yolunu qaytarır |
|
Direktoriyaların separatoru (məsələn, \ və ya /) |
|
Alternativ separator |
|
Ətraf mühit dəyişənlərində yolların separatoru (; və ya :) |
2. Yolun hissələrini almaq
Demək olar ki, Path klassının bütün metodları statikdir. Instans yaratmağa ehtiyac yoxdur — sadəcə Path.MetodAdi(...) çağırın.
Ən çox istifadə olunan alətlər: GetFileName, GetDirectoryName, GetExtension, GetFileNameWithoutExtension. Hər zaman faylın yolunu olmadan adını çıxarmaq, yalnız uzantını öyrənmək və ya onun olduğu qovluğu tapmaq lazım ola bilər.
Nümunə:
using System;
using System.IO;
string path = @"C:\Projects\MyApp\data\info.json";
Console.WriteLine(Path.GetFileName(path)); // info.json
Console.WriteLine(Path.GetFileNameWithoutExtension(path)); // info
Console.WriteLine(Path.GetExtension(path)); // .json
Console.WriteLine(Path.GetDirectoryName(path)); // C:\Projects\MyApp\data
| Kod | Nəticə |
|---|---|
|
info.json |
|
|
|
.json |
|
info |
|
C:\Projects\MyApp\data |
3. Yolların birləşdirilməsi: Combine
Yeni başlayanların ən yaygın səhvi — yolları adi string konkatenasiyası ilə birləşdirmək. Belə etməyin!
Səhv nümunə kod:
// Problemli ola bilər!
string fullPath = "C:\\Projects\\MyApp\\" + "data\\info.json";
Əgər slash/backslash qoymağı unutmusunuzsa nə olar? Və ya separatorla səhv etsəniz?
Düzgün yol — Path.Combine istifadə etməkdir.
string folder = @"C:\Projects\MyApp";
string filename = "data\\info.json";
string fullPath = Path.Combine(folder, filename);
// Hər platformada segmentləri düzgün birləşdirəcək!
Console.WriteLine(fullPath); // C:\Projects\MyApp\data\info.json
Nisbət yollarla işləmək
Əgər nisbət yol versəniz, Path.Combine onu düzgün emal edəcək. Yolu məhz segmentlərə bölməyə çalışın!
string baseDir = "C:/work";
string subDir = "docs";
string file = "readme.txt";
string path = Path.Combine(baseDir, subDir, file);
// Nəticə: "C:/work/docs/readme.txt" (və ya backslash ilə — platformadan asılıdır)
Maraqlı fakt: Path.Combine daxilində sizin OS üçün düzgün separator istifadə olunur. Windows-da — \, Linux/Mac-də — /. Kodunuz cross-platform uyğun olur, hətta siz buna fikir verməsəniz belə!
4. Yolun etibarlılığını yoxlamaq
Bunun üçün xüsusi metodlar var: GetInvalidPathChars, GetInvalidFileNameChars.
Məsələn, istifadəçi interfeysindən fayl adı və ya yol daxil edibsə, string-də qadağan olunmuş simvolların olmadığından necə əmin olmaq olar? Sadəcə Path-ə soruşun.
char[] invalidPathChars = Path.GetInvalidPathChars();
char[] invalidFileNameChars = Path.GetInvalidFileNameChars();
string userInput = "data*?.txt";
foreach (char c in userInput)
{
if (Array.Exists(invalidFileNameChars, x => x == c))
{
Console.WriteLine($"Yaddaş olmaz simvol fayl adında: {c}");
}
}
// Çap edəcək: Yaddaş olmaz simvol fayl adında: *
Bu xüsusilə vacibdir, əgər proqram istifadəçidən və ya etibarsız mənbələrdən yollar alırsa!
5. Faydalı metodlar
Fayl uzantısını dəyişmək: ChangeExtension
Bəzən faylın uzantısını başqa ilə dəyişmək lazım olur. Bir sətrdə edilir!
string oldPath = @"C:\data\report.csv";
string newPath = Path.ChangeExtension(oldPath, ".bak");
Console.WriteLine(newPath); // C:\data\report.bak
ChangeExtension yolun digər hissələrinə toxunmur — yalnız "quyruğu" əvəz edir.
Absolut yolu almaq: GetFullPath
Əgər yol nisbətdirsə, bu metodla onun absolut (tam) yolunu ala bilərsiniz.
string relPath = @"..\..\logs\2024.log";
string absPath = Path.GetFullPath(relPath);
Console.WriteLine(absPath);
// Məsələn: C:\Projects\MyApp\logs\2024.log
Real nəticə tətbiqin cari iş qovluğundan (Directory.GetCurrentDirectory()) asılıdır.
Yol separatorları: Path.DirectorySeparatorChar
Xatırlayın, Windows-da separator — \, Linux-da — /.
Yarışmayın — bu xassələrdən istifadə edin:
- Path.DirectorySeparatorChar — sizin OS-də əsas direktoriyaseparatoru ('\\' Windows üçün, '/' Linux üçün).
- Path.AltDirectorySeparatorChar — alternativ separator (məsələn, Windows-da '/' də işləyə bilər).
- Path.PathSeparator — ətraf mühit dəyişənlərində yolların separatoru (Windows üçün ';', Linux üçün ':').
İstifadə nümunəsi:
Console.WriteLine(Path.DirectorySeparatorChar); // \ (Windows-da)
Console.WriteLine(Path.AltDirectorySeparatorChar); // / (Windows-da)
Console.WriteLine(Path.PathSeparator); // ; (Windows-da)
Bu aktualdır, əgər məsələn direktoriyalarda öz yol-düzəltmə alqoritminizi yazırsınızsa!
6. Müvəqqəti fayllar və kataloqlarla işləmək
Hər proqram bəzən müvəqqəti fayllara ehtiyac duyur — məsələn, ara nəticələri saxlamaq və ya atomik yeniləmə üçün.
- Path.GetTempPath() — sistem üçün müvəqqəti fayllar qovluğunun yolunu qaytarır.
- Path.GetTempFileName() — unikal adla müvəqqəti fayl yaradır və onun yolunu qaytarır.
Nümunə:
string tempDir = Path.GetTempPath();
Console.WriteLine($"Müvəqqəti fayllar üçün qovluq: {tempDir}");
string tempFile = Path.GetTempFileName();
Console.WriteLine($"Yaradılmış müvəqqəti fayl: {tempFile}");
Bu metodlar ad toqquşmalarından və texniki faylların harada saxlanacağı barədə qayğıdan xilas edir.
7. Yollarla bağlı tez-tez olunan səhvlər və maraqlı hallar
Birincisi, yolun sadə string toplaması ilə qurulması vərdişi. "Aa, bu çox sadədir: folder + "\\\" + file"! Praktikada: ikiqat slashlar, unutulmuş slashlar, Linux üçün səhv separatorlar. Bütün bunlar problemə çevrilir, əgər Path.Combine istifadə etmirsinizsə.
İkincisi, qadağan olunmuş simvollardan xəbərsiz olmaq. Məsələn, istifadəçi fayl adında * («ulduz») daxil edirsə — istisna ilə üzləşəcəksiniz.
Üçüncüsü, nisbət və absolut yolları qarışdırmaq — nəticədə proqram faylı gözlədiyiniz yerdə tapmaya bilər, məsələn "notebook.txt" başqa qovluqda axtarılır.
Məsləhət: fayl yolunu hər hansı əməliyyatda birləşdirmə, parçalama, uzantı dəyişmə və ya səhv qorunması edərkən ilk növbədə özünüzdən soruşun: "Bu məsələ Path klassının metoduyla həll edilə bilərmi?" 99% ehtimalla — bəli, və bu metod Microsoft komandası tərəfindən bütün qəribə edge-case-lərə qarşı test edilib.
GO TO FULL VERSION