begin process at 2008 07 19 16:47:05
1 212 905 membres
227 nouveaux aujourd'hui
14 165 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DECOUPAGE CHEMIN FICHIER (FORUM)


Information sur la source

Catégorie :Fichiers / Disque Classé sous : découper, fichier, split, path, chemin Niveau : Débutant Date de création : 10/08/2005 Date de mise à jour : 10/08/2005 14:17:19 Vu / téléchargé: 5 217 / 254

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

Description

Suite a une demande sur le forum, voila un code qui permet de découper le chemin
d'un fichier en sous élément.
Le chemin doit etre passé a la ligne de commande.

L'interet d'un tel code ne réside que dans la manipulation des chaines de caractères.

Le code est entierement en C.

Shell
[http://www.free-go.net]
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   FileInfo
    •   Release
      • test.exeTélécharger ce fichier [Réservé aux membres club]40 960 octets
    • test.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier3 248 octets
    • test.slnTélécharger ce fichier [Réservé aux membres club]Voir ce fichier897 octets
    • test.suoTélécharger ce fichier [Réservé aux membres club]11 264 octets
    • test.vcprojTélécharger ce fichier [Réservé aux membres club]4 551 octets

Télécharger le zip

10 août 2005 12:32:50 :
Juste pour essayer ^_^
10 août 2005 14:17:19 :
Correction d'une fuite mémoire (Thx BruNews)
  • signaler à un administrateur
    Commentaire de xterminhate le 10/08/2005 12:37:47

    Rapide.... ;-)

  • signaler à un administrateur
    Commentaire de BruNews le 10/08/2005 12:57:59 administrateur CS

    Salut,

    eh bien tu n'es pas en forme ?

    Dans ta GetFileType(), il y a de la mémoire allouée par ta strtoupper(), je ne vois pas le free() correspondant. Comme quoi il ne faut jamais retourner de chaine allouée dans une func c'est source d'oubli de libération de mémoire à tout coup, faut passer buffer que la func remplira. De plus ça oblige à bosser avec le mode d'alloc de la func, on peut ne pas vouloir de la CRT.

    En C on connait les pointeurs, pas besoin d'itérateurs comme dans GetFileName() et les autres, ça fait parcourit les chaines plusieurs fois. 1 seul compteur suffit pour controler la longueur qund tu écris afin d'éviter un overflow.

    A revoir, bonne continuation.

  • signaler à un administrateur
    Commentaire de steve_clamage le 10/08/2005 13:22:49

    Il manque des const et un entete (ctype.h pour toupper), le cast de la valeur retour de malloc n'est pas nécéssaire.

  • signaler à un administrateur
    Commentaire de DeAtHCrAsH le 10/08/2005 13:58:53

    BruNews> Faut dire que je dors pas beaucoup ces temps ci (debout 5h, coucher 23h30)
    Sinon pour les itérateurs je sais que j'aurais pu passer par les pointeurs en décellant le "Null-terminated string" mais le gars est un débutant. C'est plus dans l'optique de travailler sur des tableaux que sur des pointeurs.

    Steve_Clamage> Pour le cast je suis obligé car je passe par un compilateur C++. Il n'accèpete pas de transtypé un (void *) en (char *).
    Sinon pour l'entete ctype.h, elle peut etre ommise car déjà présente dans stdlib.h.

  • signaler à un administrateur
    Commentaire de steve_clamage le 10/08/2005 14:28:42

    Pourquoi tu compiles en C++ ? Tu peux tres bien compiler en C, c'est juste une histoire d'extension du fichier source avec la plupart des edi.

  • signaler à un administrateur
    Commentaire de DeAtHCrAsH le 10/08/2005 14:39:31

    Steve_Clamage> Le gars bosse sur un projet C++. J'ai fait le code en C mais dans un .cpp car il ne va pas l'utiliser tel quel.

    BruNews> Vala je viens de corriger le probleme de la fuite mémoire. J'ai monter le buffer dans les params de la fonctions.

  • signaler à un administrateur
    Commentaire de steve_clamage le 10/08/2005 14:45:12

    Mais dans ce cas il faut absolument mettre la directive extern "C", et pourquoi donner une solution C à un probleme en C++ ?

  • signaler à un administrateur
    Commentaire de DeAtHCrAsH le 10/08/2005 14:50:12

    Steve_Clamage> lol t'es l'inspecteur gadget ? Tout ce qui "marche" en C "marche" en C++. Pas besoin de ces directives de compilations. Le gars va tout simplement récuperer le code et je ne suis meme pas sure qu'il va le copier tel quel.
    Cette source est plus a titre d'apprentissage que de réutilisation.

    Faut que j'aille au poste pour plus de question ? ^_^

  • signaler à un administrateur
    Commentaire de steve_clamage le 10/08/2005 15:00:39

    Tout ce qui "marche" en C "marche" en C++

    Justement non, c'est pour ca toute ces questions, C n'est pas compatible avec C++. Enfin c'est grave.

  • signaler à un administrateur
    Commentaire de steve_clamage le 10/08/2005 15:05:02

    C'est pas grave je voulais dire, on peut se contenter de mettre le code en extern "C", le C s'interface tres bien avec le C++.

  • signaler à un administrateur
    Commentaire de DeAtHCrAsH le 10/08/2005 15:19:23

    D'ou les guillemets que j'ai mis en écrivant "marche" ;-)

    Quote : "C n'est pas compatible avec C++"
    T'aurais pas oublier des guillemets aussi ? lol

    Mais bon comme tu le dis ca s'interface.

  • signaler à un administrateur
    Commentaire de steve_clamage le 10/08/2005 15:26:57

    Les guillemets ? non je penses pas, ca compile ca en C++ ?

    struct
    {
    int a;
    int b;
    } s = { .b = 5 };

    Mais tu as raison, c ansi est à peu de chose prés (cast du void* par exemple) compatible avec C++.

  • signaler à un administrateur
    Commentaire de vecchio56 le 10/08/2005 15:52:08 administrateur CS

    Ton code est destiné à Windows apparemment; sous VC++ on peut aussi utiliser _splitpath

  • signaler à un administrateur
    Commentaire de ledruid le 10/08/2005 20:41:16

    Je confirme, c'est suite à ma demande sur le forum que il y à eu la gentillesse  de me donner un coup de main, et effectivement je suis sur un projet en c++ avec quelques contraintes ( mais je suis un vrai débutant .. lol).

    Et effectivement le but n'est pas de le copier tel quel, mais plutot de m'en servir pour "apprendre".

  • signaler à un administrateur
    Commentaire de vecchio56 le 10/08/2005 20:58:26 administrateur CS

    A chaque fois tu fais deux boucles la ou tu pourrais n'en faire qu'une seule:
    une boucle sur i puis une avec strncat/strcpy
    Par exemple GetFileDrive pourrait devenir:
    int GetFileDrive(const char* FilePath, char *tFileDrive)
    {
      while(*FilePath != '\\') *tFileDrive++ = *FilePath++;
      *tFileDrive = 0;
      return 0;
    }

    C'est peut être plus dificile a saisir pour un débutant il est vrai.
    Le premier param devrait être de type const char* au lieu de char[MAX_PATH] car on doit pouvoir mettre une chaine la taille qu'on veut

  • signaler à un administrateur
    Commentaire de vecchio56 le 10/08/2005 20:59:37 administrateur CS

    Une déclaration de ce type pourrait aussi être utile si on a besoin de faire des concaténations par la suite:

    char* GetFileDrive(const char* FilePath, char *tFileDrive)
    {
      while(*FilePath != '\\') *tFileDrive++ = *FilePath++;
      *tFileDrive = 0;
      return tFileDrive;
    }

  • signaler à un administrateur
    Commentaire de DeAtHCrAsH le 10/08/2005 22:43:54

    Vecchio56> Vi vi en effet.... C'est la remarque que BruNews avait fait plus haut (l'histoire des boucles)

Ajouter un commentaire

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS