begin process at 2012 02 08 09:53:54
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > MSDOSTOWINDOWSFILENAME POUR CONVERTIR LES NOMS MS-DOS DE FICHIER

MSDOSTOWINDOWSFILENAME POUR CONVERTIR LES NOMS MS-DOS DE FICHIER


 Description

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

  • 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;
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/


 Sources du même auteur

RÉCUPÉRER LE KBID DES PATCHS CORRECTIFS INSTALLÉS SUR UNE MA...
Source avec Zip INFORMATIONS POUSSÉES SUR UNE PAGE D'UN TWEBBROWSER
Source avec Zip CORRECTEUR ORTHOGRAPHIQUE EN DIRECT
CODE DE HAMMING (4,8) : TRANSMISSION DE DONNÉES SANS ERREUR ...
MODIFIER L'HORLOGE DU SYSTÈME D'EXPLOITATION

 Sources de la même categorie

Source avec Zip Source avec une capture RECHERCHE PAR EXTENSION AVEC JVCL par Weirdy
Source avec Zip Source avec une capture FICHIER DUPLIQUÉ AVEC UNE TABLE DE HACHAGE par jerome1875
Source avec Zip Source avec une capture WII SD CARD NAVIGATOR 1.0.0.5 ALPHA par skyangel21
Source avec Zip Source avec une capture SIZECONVERTER : UNE MINI LIBRAIRIE DE CONVERSION DE TAILLE par LaDentDeLait
Source avec Zip Source avec une capture ENREGISTREMENT DES DONNÉES DANS L'EXE par yanb

Commentaires et avis

Commentaire de JulioDelphi le 05/11/2004 22:31:00 administrateur CS

Super ton MicrosoftDiskOperatingSystemToMicrosoftWindowsNomDeFichier !

Commentaire de Delphiprog le 05/11/2004 23:50:12 administrateur CS

Pas mal, pas mal...
Pour ceux qui se demandent à quoi correspond la "valeur magique" $10, eh bien il s'agit de FILE_ATTRIBUTE_DIRECTORY. Ca rend le code plus facilement compréhensible.

Commentaire de grandvizir le 06/11/2004 19:27:55

Je l'avais enlevé puisque ça vient de FileCtrls.pas

Commentaire de Delphiprog le 06/11/2004 19:38:42 administrateur CS

OK, le motif est valable.
Seulement, ça peut poser des problèmes de portabilité vers Kylix si l'on remplace des constantes symboliques par leur valeurs. Ou alors, on devrait utiliser les directives de compilation :
{$IFDEF WIN32}$10{$ENDIF}{$IFDEF KYLIX}FILE_ATTRIBUTE_DIRECTORY{$ENDIF}.
Comme ça, tout le monde est content. ;o)

Commentaire de grandvizir le 06/11/2004 20:33:56

Je n'utilise pas Kylix. Mais sinon voilà... ok!

Commentaire de MAURICIO le 08/11/2004 11:42:50 administrateur CS

Voici 2 fonctions qui vous font la conversion dans les 2 sens (pratique non?).
Il vous faudra mettre ShellAPI dans les uses unit ...


function FICHEIRO_NOME_CURTO(Const NomeComprido : String) : String;
var aTmp: array[0..255] of char;
begin
  if GetShortPathName(PChar(NomeComprido),aTmp,Sizeof(aTmp)-1)=0
  then Result:= NomeComprido
  else Result:=StrPas(aTmp);
end;

function FICHEIRO_NOME_COMPRIDO(Const NomeCurto : String) : String;
var aInfo: TSHFileInfo;
begin
  if SHGetFileInfo(PChar(NomeCurto),0,aInfo,Sizeof(aInfo),SHGFI_DISPLAYNAME)<>0
  then Result:= String(aInfo.szDisplayName)
  else Result:= NomeCurto;
end;

Les fonctions sont de moi mais la source originale non ...

Commentaire de JulioDelphi le 08/11/2004 18:53:16 administrateur CS

super ton code mauricio, je le garde :D tres court et tres utile.
merci

Commentaire de MAURICIO le 09/11/2004 11:20:00 administrateur CS

De rien, toujours à disposition!
Au fait, il semble qu' il ne renvoit que le nom du fichier et pas avec toute l' arborescence:
je vais y jeter un oeil tout à l' heure et je le remettrai comme source!!!

Commentaire de grandvizir le 10/11/2004 17:21:14

Je limite toujours les fonctions SH~ dans mes projets. Je préfère les fonctions basiques de Delphi en ASM. Au moins, on sait ce qu'on fait.

Ceci dit, on ne fait pas tout, et on a alors besoin des astuces de MAURICIO. Et c'est plus court... certes ! Merci encore de sa participation :)

Commentaire de clandestino le 11/11/2004 12:27:02

Sous windows :
getfullpathname et getshortpathname sont les deux apis à utiliser...

Clandestino

Commentaire de grandvizir le 12/11/2004 19:16:53

Unité Windows... Bien vu :)

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales