Dostlar, selam. Şu an bir masaüstü uygulama üzerinde çalışıyorum ve kullanıcının sürükleyip bıraktığı dosyanın yolunu almak gibi "basit" bir işlemi yapıyordum. Meğerse bu, benim için mini bir rus ruletine dönüşecekti. Bazen yol `C:\Users\bingunluk\Resimler\foto.jpg` gibi geliyor, bazen de `\\DESKTOP-ABC123\Users\bingunluk\Resimler\foto.jpg` gibi bir UNC path (ağ yolu) olarak! Aynı bilgisayarda, aynı uygulamada! StackOverflow'da bile bu kadar net bir çözüm bulamadım, şaka gibi.
Olayı araştırmaya başladım. Meğerse Windows, özellikle de Windows 10/11 sonrası, "Hızlı Erişim" ve bazı paylaşım ayarları yüzünden bu işi yapıyormuş. Kullanıcı bir dosyayı Bu Bilgisayar üzerinden sürüklerse local path, bazen de dosya gezgini otomatik olarak onu ağ paylaşımı üzerinden gösterdiği için UNC path'i veriyor. Benim kodum ise sadakatle gelen string'i işliyor ve UNC path geldiğinde bazı izin kontrollerim çakılıyordu. Klasik "Benim makinemde çalışıyordu" sendromu.
İşte o masum event handler:
C#:
string[] dosyaYollari = (string[])e.Data.GetData(DataFormats.FileDrop);
Sonunda, gelen yolun başlangıcını kontrol edip, gerekirse local path'e çeviren basit bir yardımcı metod yazdım. Amacım, uygulamanın iç işleyişi için her zaman local path ile çalışmak.
C#:
private string UncToLocalPath(string path)
{
// Gelen yol bir UNC yolu mu kontrol et (\\ ile başlıyor mu?)
if (path.StartsWith(@"\\"))
{
try
{
// UNC yolunu local bir sürücü harfine eşle
Uri uri = new Uri(path);
string localPath = uri.LocalPath;
return localPath; // Örn: \\PC\C$\Users -> C:\Users
}
catch
{
// Dönüştürülemezse orijinal halini döndür
return path;
}
}
// UNC değilse, olduğu gibi döndür
return path;
}
Bu yöntem, çoğu durumu halletti. Tabii `C$` gibi yönetici paylaşımları için farklı senaryolar olabilir, ona da ayrıca bakmak lazım.
Bu olay bana, "sürükle-bırak" gibi temel kabul ettiğimiz işlemlerin bile altında işletim sisteminin ne kadar farklı davranabileceğini bir kez daha hatırlattı. Veriyi işlemeden önce normalize etmek her zaman altın kural.
Peki ya siz? Böyle bir "path karmaşası" yaşadınız mı? UNC path'leri handle etmek için daha temiz, daha güvenli bir yönteminiz var mı? Yoksa siz de böyle küçük kontrollerle mi idare ediyorsunuz? Yorumlara bekliyorum!