comment extraire le filename d'un chemin en C

comment extraire le filename d'un chemin en C - C++ - Programmation

Marsh Posté le 12-03-2003 à 17:37:26    

tout est dans le sujet, par exemple :
 
en entrée j'ai "c:\truc\machin\pouet.txt"
en sortie j'aimerai donc "pouet.txt"
 
y'a un moyen simple de faire ca ?
merci

Reply

Marsh Posté le 12-03-2003 à 17:37:26   

Reply

Marsh Posté le 12-03-2003 à 17:38:36    

pour l'instant je pars en codant ca :
1 parcourir la chaine et detecter le dernier emplacement d'un '\'
2 reparcourir en copiant de '\'+1 jusqu'a la fin
mais n'hesitez pas a proposer mieux !

Reply

Marsh Posté le 12-03-2003 à 17:43:20    

y'a un moyen simple:
 
http://msdn.microsoft.com/library/ [...] itpath.asp


Message édité par bjone le 12-03-2003 à 17:44:19
Reply

Marsh Posté le 12-03-2003 à 17:50:41    

si t'es en C++Builder : ExtractFileName


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 12-03-2003 à 17:51:20    

oui, mais j'avais oublier de preciser que je devais produire un code multiplateforme.
du coup, j'ai fait ca
 

Code :
  1. void ExtractFileFromPath(const char *path, char *file)
  2. {
  3. int cpt,cpt2;
  4. int last=0;
  5. for (cpt=0;cpt<strlen(path);cpt++)
  6.  if ((path[cpt]=='/') || (path[cpt]=='\'))
  7.   last=cpt;
  8. cpt2=0;
  9. for (cpt=last;cpt<strlen(path);cpt++)
  10.  {
  11.  file[cpt2]=path[cpt];
  12.  cpt2++;
  13.  }
  14. }


 
c'etait pas si dur...
merci


Message édité par nico168 le 12-03-2003 à 17:52:09
Reply

Marsh Posté le 12-03-2003 à 17:53:07    

Heu ca va foirer si tu as un fichier avec un "\" dans son nom sous Linux
Et ne me dites pas que ce n'est pas possible, j'ai testé :
http://www.antp.be/test/backslash/
:D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 12-03-2003 à 17:56:20    

"Heu ca va foirer si tu as un fichier avec un "\" dans son nom sous Linux"
ha oui, j'avais pas pensé a ca...
ben...je crois qu'il ne me reste plus que les directives de compilation.

Reply

Marsh Posté le 12-03-2003 à 17:57:28    

C'est ce que Borland a fait pour le ExtractFileName de C++Builder/Delphi/Kylix ;)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 12-03-2003 à 18:13:57    

heu splitpath est multi plateforme, c'est du C standard.

Reply

Marsh Posté le 12-03-2003 à 18:15:24    

pour info, la version finale.
 

Code :
  1. void ExtractFileFromPath(const char *path, char *file)
  2. {
  3. int cpt,cpt2;
  4. int last=0;
  5. for (cpt=0;cpt<strlen(path);cpt++)
  6. #ifdef WIN32
  7.  if (path[cpt]=='\\')
  8. #else
  9.  if (path[cpt]=='/')
  10. #endif
  11.   last=cpt;
  12. cpt2=0;
  13. for (cpt=last+1;cpt<strlen(path);cpt++)
  14.  {
  15.  file[cpt2]=path[cpt];
  16.  cpt2++;
  17.  }
  18. file[cpt2]='\0';
  19. }


 
Qu'est se qui est passé dans la tete de billou le jour ou il a choisit le '\' plutot que le '/' ?


Message édité par nico168 le 13-03-2003 à 10:01:46
Reply

Marsh Posté le 12-03-2003 à 18:15:24   

Reply

Marsh Posté le 12-03-2003 à 18:20:27    

t'es sur de toi pour splitpath ?
 
man splitpath me retourne rien, dans quel include je trouve ca ?

Reply

Marsh Posté le 12-03-2003 à 18:24:26    

sous visual ou borland, dans l'objet string, y a pas un stringtokenizer?

Reply

Marsh Posté le 12-03-2003 à 18:25:14    

et man _splitpath ?


Message édité par bjone le 12-03-2003 à 18:25:22
Reply

Marsh Posté le 12-03-2003 à 18:27:19    

djok_fb a écrit :

sous visual ou borland, dans l'objet string, y a pas un stringtokenizer?


 
Aucune idée, j'utilise GCC et du C ANSI.

Reply

Marsh Posté le 12-03-2003 à 18:28:04    

bizarre splitpath je l'ai toujours eu sous dos que ce soit du TC/BC/WatcomC.

Reply

Marsh Posté le 12-03-2003 à 18:28:24    

BJOne a écrit :

et man _splitpath ?


 
il ne connait pas non plus.

Reply

Marsh Posté le 12-03-2003 à 18:28:26    

oki, donc dsl pas de stringtokenizer...

Reply

Marsh Posté le 21-03-2003 à 06:44:04    

Citation :

for (cpt=0;cpt<strlen(path);cpt++)

Parcours complet à chaque tour de boucle... Ce truc m'a toujours fait marrer.
 

Code :
  1. #include <string.h>
  2. int IsPathSeparator(char c){
  3. #ifdef WIN32
  4. return c=='/' || c=='\\'; //windows
  5. #else
  6. return c=='/'           ; //linux ?
  7. #endif
  8. }
  9. void ExtractFileFromPath(const char *FullPath, char *FileNameExt){
  10. int pos;
  11. for(pos= strlen(FullPath)-1 ; pos>=0 ; --pos){
  12.  if(IsPathSeparator(FullPath[pos]))
  13.   break;
  14. }
  15. strcpy(FileNameExt, &FullPath[pos+1]);
  16. }


/ est un séparateur aussi sous windows.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed