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. P>
7 Réponses :
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. p>
Que diriez-vous:
string longPath = @"c:\somewhere\myfile.txt"; string shortPath = @"..\" + Path.GetFileName(longPath);
de cet CODING HORROR BLOG POST sur le raccourcissement des chemins de fichiers longs il y a Un appel de Windows API PathCompactPathex code>
Vous pouvez utiliser. p>
ARTICLE COOL, mais le PathCompactPathex code> 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. Code> 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 .
Vous pensez au stringtrimming. Ellipipsispath code>
constante d'énumération, qui peut être utilisé avec un stringformat code> à dessinez em> un chemin coupé en utilisant
graphique.Drawstring code>
. Cependant, .NET elle-même n'a pas de méthode qui retournera un chemin cédé. P>
J'ai trouvé une classe facile à utiliser dérivée de la zone de texte ici: Ellipsistextbox qui encapsule stringtrimming.ellipipsispath. Fonctionne pour moi! P>
au cas où quelqu'un cherche la même chose. J'ai cuisiné cette fonction:
Correction du lien.
TexTrenderer Code>
. MesureText code>
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 important: strong> passer dans une option de formatage de comme autre note de bailleur, puisque je souhaite que la chaîne compactée compacte un chemin, j'ai également utilisé le 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é: p> Il existe des solutions cultivées à la maison aux chemins compacts ainsi que certains appels Winapi, on peut utiliser. P> Vous pouvez utiliser Pinvoke pour appeler Source de code Pinvoke: http://www.pinvoke.net/default.aspx/shlwapi.pathcompactPathex p> 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: p> textrenderer code>
's MesureText code>
Méthode comme: p> TEXFORMATFLAGS.MODIFYSTRING CODE>
fait effectivement la MesureText code>
pour modifier l'argument de chaîne ( compactedstring code>) pour être compacté chaîne de caractères. Cela semble très étrange depuis aucun
réf code> ou
out code> 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. P>
textformatflags.pathellipsis code>
option de formatage. P > Façons alternatives de compact un chemin: h1>
PathCompactPathEX - Compactage d'une chaîne basée sur la longueur de la chaîne souhaitée Caractères h2>
PathCompactPathex code >
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. P> Autres solutions H2>