Convertir chemin d'un fichier

boumarsel Messages postés 298 Date d'inscription jeudi 12 juin 2003 Statut Membre Dernière intervention 9 juillet 2008 - 13 avril 2006 à 19:15
excrt Messages postés 75 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 3 juillet 2006 - 23 avril 2006 à 17:32
bonjour,
une fonction me retorune un chemin sous format :
/physicaldrive/mondossier/fichier1 (je me rappelle pas exactement, mais c'est pas loin de ça, ça doit etre physicaldrive0 pour les fichier de la partition c)
alors je veux le convertir en c:\mondossier\fichier1
(win32 api)
merci

7 réponses

excrt Messages postés 75 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 3 juillet 2006
13 avril 2006 à 22:07
/*

* 2006/04/13

*

* main.c

*

*/

#include <ctype.h> /* isdigit() */

#include <stdio.h> /* puts() */

#include <stdlib.h> /* atoi()/free() */

#include <string.h> /* _strdup() */



/*

* constantes

*/

static const char _DRIVE[] = {/*'A', 'B',*/

'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',\

'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};

#define _DRIVE_COUNT ((sizeof(_DRIVE) / sizeof(_DRIVE[0])) - 1)



static const char* _PHYSICAL_DRIVE = "physicaldrive";

#define _PHYSICAL_DRIVE_LENGTH (sizeof("physicaldrive") - 1)



/*

* fonctions locales

*/

static __inline void __stdcall _slash_to_backslash(char* string);

static int __stdcall _convert_pathname(char* pathname);



/*

* main()

*/

int __cdecl main()

{

char* path = _strdup("/physicaldrive0/dossier 1/dossier 2/mon fichier.txt");

//char* path = _strdup("test");

//char* path = _strdup("////test/////");

//char* path = _strdup("/physicaldrive1234\\test");

//char* path = _strdup("/physicaldrive////");

//char* path = _strdup("physicaldrive121/dossier 1/dossier 2/mon fichier.txt");



_convert_pathname(path);

puts(path);



free(path);

return 0;

}



/*

* remplace tous les '/' par des '\\'

*/

static __inline void __stdcall _slash_to_backslash(char* string)

{

for (; *string != '\0'; string++)

{

if (*string == '/') {

*string = '\\';

}

}

}



/*

* from:

* - [/]physicaldrive<N>[/folder1[/folder2/...]]

* to:

* - <D>:\\[folder1[\\folder2[\\...]]]

*

* <N> => Number

* <D> => Drive

*

*/

static int __stdcall _convert_pathname(char* pathname)

{

unsigned drive_index;

char* left = pathname;



_slash_to_backslash(pathname);



if (*pathname == '\\') {

pathname++;

}

if (_strnicmp(pathname, _PHYSICAL_DRIVE, _PHYSICAL_DRIVE_LENGTH) == 0)

{

/* skip « physicaldrive » */

pathname += _PHYSICAL_DRIVE_LENGTH;



if ( isdigit(*(unsigned char*)pathname) )

{

if
((drive_index = (unsigned)atoi(pathname)) > _DRIVE_COUNT) {

drive_index = _DRIVE_COUNT;

}

/* skip number */

while ( isdigit(*(unsigned char*)pathname) ) {

pathname++;

}

*left++ = _DRIVE[drive_index];

*left++ = ':';



while ((*left++ = *pathname++) != '\0') {

/*nothing*/

}

return 1; /* SUCCESS */

}

/*

else {

return 0; // ERROR: invalid drive number

}

*/

}

return 0; /* ERROR: invalid pathname */

}



/****************************************************/



C:\dossier 1\dossier 2\mon fichier.txt

Press any key to continue





-=-= ExCRT =-=-
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 avril 2006 à 22:58
A quoi sert le tableau _DRIVE[] ???

*left++ = _DRIVE[drive_index];
deviendrait: *left++ = drive_index + 'C';

ciao...
BruNews, MVP VC++
0
excrt Messages postés 75 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 3 juillet 2006
14 avril 2006 à 03:54
oui, tout a fait

-=-= ExCRT =-=-
0
boumarsel Messages postés 298 Date d'inscription jeudi 12 juin 2003 Statut Membre Dernière intervention 9 juillet 2008 1
17 avril 2006 à 19:59
je vous remercie pour votre effort mais ce que je demande c'est tout simplement une fonction API pour convertir le chemin de "device\harddisk0\mondossier\fichier" (je me suis trompé au début) à "c:\mondossier\fichier".
il y a certainement une fonction pour le faire sans implémenter tous ces lignes de code, le chemin "device\harddisk0\..." que je cherche à convertir est renvoyé par la fonction API getMappedFile (si je me rappelle bien).
j'ai testé qq fonctions que j'ai trouvé dans la section "path" et "drive" de la documentation MSDN mais ça n'a pas marché
(c'est du win32api non pas du turbo c ;) )

je vous remercie encore une fois pour votre effort, il sont de plus en plus rares les développeurs qui sont préts à sacrifier bcp de temps pour répondre à des questions sur ce forum.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
excrt Messages postés 75 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 3 juillet 2006
18 avril 2006 à 16:37
rien à voir avec « TurboC », c'est du C carrément. L'API Windows est elle-même codé en C et en C++. « TurboC » n'est pas un langage mais un compilateur ... Je ne crois pas que tu puisse trouver une fonction dans l'API Windows qui permet de convertir ton « path » mais, bonne recherche ...

-=-= ExCRT =-=-
0
boumarsel Messages postés 298 Date d'inscription jeudi 12 juin 2003 Statut Membre Dernière intervention 9 juillet 2008 1
18 avril 2006 à 20:07
je préfére ne pas orienter la déscussion à qq chose d'inutile, j'ai une question et je cherche une réponse, si tu n'as pas une information utile ferme cette page et cherche ailleur. me reste à te signaler que c'est pas à toi de me montrer la différence entre un langage et un compilateur ou ide, et si je l'ai dit dans mon msg c'est pour la simple raison que j'aime appeler comme ça tout programme du genre.
0
excrt Messages postés 75 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 3 juillet 2006
23 avril 2006 à 17:32
ooohhhh mais on ce calme mon petit ... si tu n'aimes pas cette « petite remarque », c'est ton problème. je n'ai pas crié, je ne t'ai pas insulté, ni rien d'autre du genre, alors prends une grande inspiration et expire lentement ... TurboC est un compilateur et non un langage(il n'y a rien de méchant/insultant/... dans cette phrase).

-=-= ExCRT =-=-
0
Rejoignez-nous