SORU
9 Kasım 2008, Pazar


Nasıl mutlak yolu göreli bir yol almak için

Dosya yolunu OpenFileDialog ile kullanıcı tarafından yüklenen görüntüler uygulamalarım içinde bir bölüm var. Yolun tamamını görüntülemek için çok fazla yer kaplıyor, ama belirsiz olabilir gibi sadece dosya adını görüntülemek için istemiyorum. Dosya yolunu montaj/exe dizinine göre göstermeyi tercih ederim.

Örneğin, Meclis\Kukla" ve "C:\Program Dosya\Klasör Kukla\MyProgram\Data\datafile1.dosya "C:\Program Dosyaları alır"o zaman bunu göstermek istiyorum ".\dat Data\datafile1.". dat Eğer dosya "C:\Program Dosyaları Kukla\datafile1 Klasör\. ise dat", sonra "..\datafile1 istemez.". dat Ama eğer dosya 1 kök dizini altında root dizinine ya, o zaman tam yolunu görüntüler.

Ne çözüm önerirsiniz? Düzenli ifade?

Temelde çok fazla ekran alanı almadan yararlı dosya yolu bilgilerini görüntülemek için istedim.

Biraz daha açıklık getirmek için. EDİT: Bu çözümün amacı, kullanıcı ya da kendimi dosyası hangi dizinden geçen ve yaklaşık yükledim mi bilmek yardımcı olmaktır. Salt okunur bir textbox yol göstermek için kullanıyorum. Çoğu zaman, dosya yolu metin ekran alanı daha çok daha uzundur. Yol ama daha fazla ekran yer almak gibi bilgilendirici değil önemli sanırlardı.

Alex Brault yorum iyi oldu, bu yüzden Jonathan Leffler. Win 32 işlevi, sorunun bir parçası ile DavidK sadece yardım sağladığı, bütün, ama yine de teşekkürler. Newton-King James çözümü için, özgür olduğum zaman bir şans daha vereceğim.

CEVAP
4 Aralık 2008, PERŞEMBE


/// <summary>
/// Creates a relative path from one file or folder to another.
/// </summary>
/// <param name="fromPath">Contains the directory that defines the start of the relative path.</param>
/// <param name="toPath">Contains the path that defines the endpoint of the relative path.</param>
/// <returns>The relative path from the start directory to the end path or <c>toPath</c> if the paths are not related.</returns>
/// <exception cref="ArgumentNullException"></exception>
/// <exception cref="UriFormatException"></exception>
/// <exception cref="InvalidOperationException"></exception>
public static String MakeRelativePath(String fromPath, String toPath)
{
    if (String.IsNullOrEmpty(fromPath)) throw new ArgumentNullException("fromPath");
    if (String.IsNullOrEmpty(toPath))   throw new ArgumentNullException("toPath");

    Uri fromUri = new Uri(fromPath);
    Uri toUri = new Uri(toPath);

    if (fromUri.Scheme != toUri.Scheme) { return toPath; } // path can't be made relative.

    Uri relativeUri = fromUri.MakeRelativeUri(toUri);
    String relativePath = Uri.UnescapeDataString(relativeUri.ToString());

    if (toUri.Scheme.ToUpperInvariant() == "FILE")
    {
        relativePath = relativePath.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);
    }

    return relativePath;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • apenney888

    apenney888

    27 EKİM 2010
  • rtisticsdev

    rtisticsdev

    31 Mayıs 2012
  • TheOtherMau5

    TheOtherMau5

    6 Mart 2012