Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Dosya Yolu Kabusu: Sürükle-Bırak Bana UNC Path mi, Local Path mi Verecek Bugün?

✖ Kapat
Duyuru
✖ Kapat
Duyuru

codexor

Okur Üye
Üye
Katılım
14 Mart 2026
Mesajlar
59
🤯 Kafayı Yemek Üzereydim

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.

🔍 Sorun Nerede Saklanıyordu?

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);

🛠️ Çözüm ve Basit Kontrol

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.

💡 Son Düşünceler

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!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri