Msdostowindowsfilename pour convertir les noms ms-dos de fichier

Contenu du snippet

Fonction permettant de convertir les noms MS-Dos au format complet selon Windows. Par exemple "c:\mondos~1\monfic~1.txt" devient "c:\mondossier\monfichier.txt"

Le principe est d'utiliser les fonctions de recherche de fichier en explorant les dossiers qui constituent FileName du plus profond au plus superficiel. Ainsi les noms complets s'affichent progressivement.

Astuce à connaître: la différence entre ExtractFilePath et ExtractFileDir. La première fonction renvoie toujours un "\" à la fin de l'extraction, pas la seconde. Très utile !

Le paramètre est FileName. Il se fait ronger progressivement alors que RslFN ne cesse de grossir. A la fin, il ne reste que la racine de FileName (exemple "c:\") alors que RslFN contient tous les dossiers (exemple "mondossier\monfichier.txt"). Le résultat est une simple concaténation.

Mais comme la fonction supporte que FileName soit le nom d'un dossier, j'ai déclaré IsDir afin de rajouter à la fin le "\", témoin pertinent d'un dossier.

Source / Exemple :


function MSDosToWindowsFileName(FileName: string):string;
  function IsDirectory(const Name:string):boolean;
  var i : integer;
  begin
    i:=GetFileAttributes(PChar(Name));
    IsDirectory:=(i<>-1) and ($10 and i<>0);
  end;
var RslFN : string;
    SRec  : TSearchRec;
    IsDir : boolean;
begin
  RslFN:='';
  IsDir:=IsDirectory(FileName);
  repeat
    if FindFirst(FileName,faAnyFile,SRec)=0 then
      begin
        if RslFN<>'' then RslFN:='\'+RslFN;
        RslFN:=SRec.Name+RslFN;
      end;
    FileName:=ExtractFileDir(FileName);
  until FileName[Length(FileName)]='\';
  RslFN:=FileName+RslFN;
  if (IsDir) and (RslFN[Length(RslFN)]<>'\') then RslFN:=RslFN+'\';
  MSDosToWindowsFileName:=RslFN;
end;

Conclusion :


Vous pouvez toujours aller voir http://altert.family.free.fr/

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.