Affichage en abrégé des chemins et fichiers (Function)

mikka78 Messages postés 2 Date d'inscription mercredi 15 décembre 2004 Statut Membre Dernière intervention 1 mai 2009 - 1 mai 2009 à 07:57
mikka78 Messages postés 2 Date d'inscription mercredi 15 décembre 2004 Statut Membre Dernière intervention 1 mai 2009 - 1 mai 2009 à 20:58
Bonjour,
J'avais trouvé sur le net une fonction standard de Delphi pour l'affichage en abrégé des chemins et nom de fichiers.
Malheureusement je ne l'ai pas noté. J'ai une application en cours et cette fonction me serait bien utile (Affichage dans listbox).
Exemple
 c:\repertoire1\repertoire2\repertoire3\repertoire4\nom_de_fichier.txt
résultat:
 c:\......\repertoire4\nom_de_fichier.txt  (de mémoire)

Si vous avez une piste, merci par avance.

4 réponses

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 mai 2009 à 11:11
Tu peux la faire toi-même sans trop de soucis ...

function ShortPath(S: String): String;
Var
Drive: String;
LastDir: String;
P: Integer;
I: Integer;
begin
Drive := ExtractFileDrive(S);
LastDir := ExtractFilePath(S);
LastDir := Copy(LastDir, 1, Length(LastDir) - 1);
P := 0;
for I := Length(LastDir) downto 1 do
if LastDir[I] = '\' then
begin
P := I;
Break;
end;
if P = 0 then Exit;
LastDir := Copy(LastDir, P + 1, Length(LastDir) - P);
Result := Format('%s\.....\%s\%s', [Drive, LastDir, ExtractFileName(S)]);
end;

Ici, on va extraire le lecteur. On aura une chaîne de la forme "C:". Ensuite, on va récupérer le dernier dossier du fichier (comme "Program Files" ou "System32"). Puis, on va coller tout ça ensemble selon le format :
Lecteur + Petits points + Nom du dernier dossier + Nom du fichier.

Et voilà !

Cette procédure n'est evidemment pas optimisée, on met du temps à trouver le nom du dernier dossier je suis sûr qu'il y a moyen d'aller plus vite ...

Cordialement, Bacterius !
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 mai 2009 à 11:14
Par contre elle ne fonctionne pas avec des fichiers comme "C:\Fichier.exe", sans répertoire entre les deux. Il faudrait l'améliorer un petit peu.
D'ailleurs, ça ne serait pas la fonction suivante que tu cherches ?

ExtractRelativePath

Cordialement, Bacterius !
0
beckerich Messages postés 302 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 17 septembre 2013 2
1 mai 2009 à 12:25
bonjour,

on peut aussi utiliser l'api DrawText qui permet l'affichage de points de suspension

http://msdn.microsoft.com/en-us/library/ms901121.aspx

Luc.
0
mikka78 Messages postés 2 Date d'inscription mercredi 15 décembre 2004 Statut Membre Dernière intervention 1 mai 2009
1 mai 2009 à 20:58
Il a fallut que je pose cette question sur ce forum, pour que je retrouve la fonction que je recherche depuis un certain temps.

Merci à tous. Bacterius, je met ta source sous le coude, j'aurai peut-être l'occasion de l'utiliser dans une autre application merci.

Pour info
Unité < FileCtrl > Function MinimizeName

const
sPath = 'c:\Program Filed\MySoftware Company\
My Super App\GreateApp.exe';

ShowMessage(MinimizeName(sPath, Form1.Canvas, 200));

//results in a message: 'c:\...\GreateApp.exe'
0
Rejoignez-nous