#include #include #include #if defined(WINDOWS) struct nomAbsoluFichierWindows { char lettreUnite; char** repertoires; int nbRepertoires; char* nom; char* extension; }; typedef struct nomAbsoluFichierWindows nomAbsoluFichier; #else struct nomAbsoluFichierUnix { char** repertoires; int nbRepertoires; char* nom; char* extension; }; typedef struct nomAbsoluFichierUnix nomAbsoluFichier; #endif int calculerNombreCaracteres(nomAbsoluFichier naf) { #ifdef WINDOWS size_t nb = 3; #else size_t nb = 1; #endif for (int i = 0; i < naf.nbRepertoires; i++) { nb += strlen(naf.repertoires[i]); } nb += naf.nbRepertoires; nb += strlen(naf.nom); if ((naf.extension != NULL) && (strlen(naf.extension) > 0)) { nb += 1 + strlen(naf.extension); } printf("%zu\n", nb); return (int) nb; } bool creerChaineNomAbsolu(nomAbsoluFichier naf, char* dst, int lMax) { #ifdef WINDOWS char* separateur = "\\"; #else char* separateur = "/"; #endif dst[0] = 0x00; if (calculerNombreCaracteres(naf) >= lMax) { return false; } #ifdef WINDOWS dst[0] = naf.lettreUnite; strcpy(&dst[1], ":"); #endif strcat(dst, separateur); for (int i = 0; i < naf.nbRepertoires; i++) { strcat(dst, naf.repertoires[i]); strcat(dst, separateur); } strcat(dst, naf.nom); if ((naf.extension != NULL) && (strlen(naf.extension) > 0)) { strcat(dst,"."); strcat(dst,naf.extension); } return true; } int main(void) { #ifdef WINDOWS char* rprts[2] = { "Users","Dupont" }; nomAbsoluFichier naf = { 'C',rprts,2,"Exemple","txt" }; #else char* rprts[2] = { "home","dupont" }; nomAbsoluFichier naf = { rprts,2,"exemple","txt" }; #endif char filename[512]; if (creerChaineNomAbsolu(naf, filename, 10)) { printf("%s\n", filename); printf("%zu\n", strlen(filename)); } else { printf("Creation impossible, tableau trop petit\n"); } return 0; }