So zeigen Sie abgekürzte Pfadnamen in .NET an

7

Ich habe ein Feld mit fester Länge, in dem ich Pfadinformationen anzeigen möchte. Ich dachte in .NET, es gibt eine Methode, die lange Pfadnamen durch Einfügen von Ellipsen in Felder mit fester Länge abkürzt, zum Beispiel ".. .... \ myfile.txt ". Ich kann nicht für das Leben von mir diese Methode finden.

    
chuckhlogan 19.11.2009, 15:42
quelle

7 Antworten

15

Display Verkürzte Wege mit TextRenderer . MeasureText

Ich hatte das gleiche Dilemma wie das OP, da ich eine Lösung brauchte, um einen abgekürzten Pfad ohne allzu großen Aufwand zu zeigen, so dass meine Benutzeroberfläche leicht die Hauptteile eines Pfades zeigen konnte. Die endgültige Lösung: Verwenden Sie TextRenderer MeasureText Methode wie folgt:

%Vor%

Wichtig: Eine Formatierungsoption von übergeben TextFormatFlags.ModifyString bewirkt, dass die MeasureText -Methode das Zeichenfolgenargument ändert ( compactedString ), um eine komprimierte Zeichenfolge zu sein. Dies erscheint sehr seltsam, da kein explizites Schlüsselwort ref oder out method angegeben ist und Strings unveränderlich sind. Es ist jedoch definitiv der Fall. Ich nehme an, der Zeiger der Zeichenfolge wurde über unsicheren Code in der neuen komprimierten Zeichenfolge aktualisiert.

Als eine weitere Anmerkung des Lesers, da ich möchte, dass die komprimierte Zeichenfolge einen Pfad komprimiert, habe ich auch die TextFormatFlags.PathEllipsis Formatierungsoption.

Ich fand es praktisch, eine kleine Erweiterungsmethode für die Steuerung zu erstellen, damit alle Steuerelemente (wie TextBox und Label) ihren Text auf einen komprimierten Pfad setzen können:

%Vor%

Alternative Möglichkeiten zum Komprimieren eines Pfades:

Es gibt eigene Lösungen für kompakte Pfade sowie einige WinApi-Aufrufe, die man verwenden kann.

PathCompactPathEx - Komprimieren einer Zeichenfolge basierend auf der gewünschten Zeichenfolgenlänge in Zeichen

Sie können pinvoke verwenden anrufen PathCompactPathEx eine Zeichenfolge basierend auf der Anzahl von Zeichen zu komprimieren Sie möchten es beschränken auf. Beachten Sie, dass die Schriftart und die Breite der Zeichenfolge auf dem Bildschirm nicht berücksichtigt werden.

Quellcode PInvoke: Ссылка

%Vor%

Andere Lösungen

Es gibt auch mehr Lösungen, die reguläre Ausdrücke und intelligentes Parsen von Pfaden beinhalten, um zu bestimmen, wo Auslassungspunkte gesetzt werden sollen. Dies sind ein paar, die ich gesehen habe:

Sam 18.02.2013 21:55
quelle
5

Falls jemand nach der gleichen Sache sucht. Ich habe mir diese Funktion ausgedacht:

%Vor%

Originaler Beitrag mit (ein wenig) Hintergrund hier

    
Torben Warberg Rohde 09.01.2011 11:37
quelle
3

Von diesem Coding Horror-Blogpost zum Verkürzen langer Dateipfade gibt es einen Windows-API-Aufruf PathCompactPathEx können Sie verwenden.

    
ChrisF 19.11.2009 15:49
quelle
1

Sie denken an die StringTrimming.EllipsisPath Aufzählungskonstante, die kann mit einem StringFormat to remote verwendet werden, um einen getrimmten Pfad zu verwenden, indem Sie Graphics.DrawString . Jedoch hat .Net selbst keine Methode, die einen getrimmten Pfad zurückgibt.

    
SLaks 19.11.2009 15:50
quelle
0

Ich kenne keine Methode, dies automatisch zu tun, aber Sie könnten einfach eine erstellen, die entweder Substring () und LastIndexOf ("\") verwendet oder die System.IO.Path.GetFileName () -Methode, um nur zu greifen der Dateiname, dann vor dem Punkt.

    
palehorse 19.11.2009 15:47
quelle
0

Wie wäre es mit:

%Vor%     
Philip Wallace 19.11.2009 15:47
quelle
0

Ich habe eine einfach zu verwendende Klasse gefunden, die von TextBox abgeleitet wurde: EllipsisTextBox das kapselt StringTrimming.EllipsisPath ein. Funktioniert für mich!

    
chuckhlogan 19.11.2009 16:18
quelle

Tags und Links