8
votes

Comment afficher les noms de chemin abrégé dans .net

J'ai un champ de longueur fixe, je voudrais afficher les informations de chemin dans. Je pensais à .NET Il existe une méthode qui abrégent les noms de chemin longue pour s'adapter à des champs de longueur fixe en insérant des ellipsis, par exemple ".. .... \ myfile.txt ". Je ne peux pas pour la vie de moi trouver cette méthode.


0 commentaires

7 Réponses :


0
votes

Je ne connais pas d'une méthode pour le faire automatiquement, mais vous pouvez facilement créer un que l'on utilise la sous-chaîne d'eau () et LastIndexof ("\") ou la méthode System.IO.Path.getFileName () Le nom de fichier, puis prépendez votre point.


0 commentaires

0
votes

Que diriez-vous:

string longPath = @"c:\somewhere\myfile.txt";
string shortPath = @"..\" + Path.GetFileName(longPath);


0 commentaires

4
votes

de cet CODING HORROR BLOG POST sur le raccourcissement des chemins de fichiers longs il y a Un appel de Windows API PathCompactPathex Vous pouvez utiliser.


1 commentaires

ARTICLE COOL, mais le PathCompactPathex L'exemple de Pinvoke dans l'article de Jeff est Buggy. J'ai essayé son code et il se bloque si vous le courez plusieurs fois. Pinvoke.com a le même code mais initialise la taille du constructeur de chaînes avant de l'utiliser avec un commentaire indiquant // Remarque: vous devez créer le constructeur avec la capacité requise avant d'appeler la fonction. avec un Lien de référence à msdn.microsoft.com/en-us/library/aa446536.aspx . Je pense que c'est une différence importante. Voir Version Pinvoke.com du code .



1
votes

Vous pensez au stringtrimming. Ellipipsispath constante d'énumération, qui peut être utilisé avec un stringformat à dessinez un chemin coupé en utilisant graphique.Drawstring . Cependant, .NET elle-même n'a pas de méthode qui retournera un chemin cédé.


0 commentaires

0
votes

J'ai trouvé une classe facile à utiliser dérivée de la zone de texte ici: Ellipsistextbox qui encapsule stringtrimming.ellipipsispath. Fonctionne pour moi!


0 commentaires

7
votes

au cas où quelqu'un cherche la même chose. J'ai cuisiné cette fonction: xxx

Poste originale avec (un peu) de fond ici


1 commentaires

Correction du lien.



17
votes

Afficher les chemins abrégés à l'aide de TexTrenderer . MesureText

J'ai eu le même dilemme que l'OP en ce que j'avais besoin d'une solution pour montrer un chemin abrégé sans trop de tracas, de sorte que mon UI puisse facilement montrer les parties principales d'un chemin. La solution finale: utilisez textrenderer 's MesureText Méthode comme: xxx

important: passer dans une option de formatage de TEXFORMATFLAGS.MODIFYSTRING fait effectivement la MesureText pour modifier l'argument de chaîne ( compactedstring ) pour être compacté chaîne de caractères. Cela semble très étrange depuis aucun réf ou out le mot clé de paramètre de méthode est spécifié et les chaînes sont immuables. Cependant, c'est certainement le cas. Je suppose que le pointeur de la chaîne a été mis à jour via un code dangereux à la nouvelle chaîne compactée.

comme autre note de bailleur, puisque je souhaite que la chaîne compactée compacte un chemin, j'ai également utilisé le textformatflags.pathellipsis option de formatage.

J'ai trouvé qu'il est utile de faire une petite méthode d'extension sur le contrôle de sorte que tout contrôle (comme Textbox's et Etique) puisse définir leur texte sur un chemin compacté: xxx

Façons alternatives de compact un chemin:

Il existe des solutions cultivées à la maison aux chemins compacts ainsi que certains appels Winapi, on peut utiliser.

PathCompactPathEX - Compactage d'une chaîne basée sur la longueur de la chaîne souhaitée Caractères

Vous pouvez utiliser Pinvoke pour appeler PathCompactPathex pour compacter une chaîne basée sur le nombre de caractères que vous souhaitez restreindre oe. Notez que cela ne prend pas en compte la police et la taille de la chaîne apparaît sur un écran.

Source de code Pinvoke: http://www.pinvoke.net/default.aspx/shlwapi.pathcompactPathex xxx

Autres solutions

Il existe également plus de solutions qui impliquent des expressions régulières et une analyse intelligente des chemins pour déterminer où mettre des ellipsiens. Ce sont quelques-unes que j'ai vu:


0 commentaires