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

Signaler
Messages postés
2
Date d'inscription
mercredi 15 décembre 2004
Statut
Membre
Dernière intervention
1 mai 2009
-
Messages postés
2
Date d'inscription
mercredi 15 décembre 2004
Statut
Membre
Dernière intervention
1 mai 2009
-
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

Messages postés
3792
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
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 !
Messages postés
3792
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
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 !
Messages postés
302
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
17 septembre 2013
1
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.
Messages postés
2
Date d'inscription
mercredi 15 décembre 2004
Statut
Membre
Dernière intervention
1 mai 2009

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'