13 Stimmen

Wie überprüft man, ob 2 DirectoryInfo-Objekte auf das gleiche Verzeichnis zeigen?

Ich habe 2 DirectoryInfo-Objekte und möchte überprüfen, ob sie auf dasselbe Verzeichnis zeigen. Außer dem Vergleich ihrer Fullname, gibt es noch bessere Möglichkeiten, das zu tun? Bitte ignorieren Sie die Groß- und Kleinschreibung von Links.

Hier ist, was ich habe.

DirectoryInfo di1 = new DirectoryInfo(@"c:\temp");
DirectoryInfo di2 = new DirectoryInfo(@"C:\TEMP");

if (di1.FullName.ToUpperInvariant() == di2.FullName.ToUpperInvariant())
{ // sie sind gleich
   ...   
}

Danke.

0voto

Ronnie Overby Punkte 43323

Einige Erweiterungsmethoden, die ich für ein aktuelles Projekt geschrieben habe, umfassen eine, die dies tun wird:

    public static bool IsSame(this DirectoryInfo that, DirectoryInfo other)
    {
        // Zip-Erweiterung würde hier nicht funktionieren, da es das längere Enumerable abschneidet, was zu einem falsch positiven Ergebnis führt

        var e1 = that.EnumeratePathDirectories().GetEnumerator();
        var e2 = other.EnumeratePathDirectories().GetEnumerator();

        while (true)
        {
            var m1 = e1.MoveNext();
            var m2 = e2.MoveNext();
            if (m1 != m2) return false; // nicht die gleiche Länge
            if (!m1) return true; // Enumeration beendet, ohne Unterschiede gefunden zu haben

            if (!e1.Current.Name.Trim().Equals(e2.Current.Name.Trim(), StringComparison.InvariantCultureIgnoreCase))
                return false; // der aktuelle Ordner in den Pfaden unterscheidet sich
        }
    }

    public static IEnumerable EnumeratePathDirectories(this DirectoryInfo di)
    {
        var stack = new Stack();

        DirectoryInfo current = di;

        while (current != null)
        {
            stack.Push(current);
            current = current.Parent;
        }

        return stack;
    }

    // für diese Frage irrelevant, aber dennoch nützlich:

    public static bool IsSame(this FileInfo that, FileInfo other)
    {
        return that.Name.Trim().Equals(other.Name.Trim(), StringComparison.InvariantCultureIgnoreCase) &&
               that.Directory.IsSame(other.Directory);
    }

    public static IEnumerable EnumeratePathDirectories(this FileInfo fi)
    {
        return fi.Directory.EnumeratePathDirectories();
    }

    public static bool StartsWith(this FileInfo fi, DirectoryInfo directory)
    {
        return fi.Directory.StartsWith(directory);
    }

    public static bool StartsWith(this DirectoryInfo di, DirectoryInfo directory)
    {
        return di.EnumeratePathDirectories().Any(d => d.IsSame(directory));
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X