IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Existence d'un répertoire [FAQ]


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Existence d'un répertoire
    Bonjour,

    Y-aurait-il un moyen de savoir si un répertoire éxiste qui pourrait marcher sous win et linux (donc sans passer par une api) ?

    Merci d'avance

  2. #2
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 337
    Points : 130 288
    Points
    130 288
    Billets dans le blog
    1
    Par défaut
    Pas très compliqué.
    - Tu lis le répertoire courant avec getcwd() et tu le met de côté
    - Tu essayes de changer vers le répertoire dont tu soupçonnes l'existence avec chdir().
    - Si la fonction retourne OK, le dossier existe, tu peux revenir à ton dossier initial que tu avais mémorisé avec getcwd()
    - Si la fonction ne retourne pas OK, le dossier n'existe pas.

    PS: Ceci dit, sous Linux, si tu n'as pas la permission d'accès au dossier, il te dira qu'il n'existe pas avec ma méthode, mais de toute façon tu ne pourrais pas y faire grand chose
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  3. #3
    fd
    fd est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut
    access(nomrep,0)

  4. #4
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut
    Salut !

    Je cherche à vérifier si un répertoire existe. Je travaille sous RedHat 9, avec le compilateur standard g++... mais ni chdir, ni access ne semblent être reconnus... Faut-il inclure des unités particulières ?? Y'a-t'il d'autres fonctions pour vérifier l'existence d'un répertoire ?

    Merci par avance

  5. #5
    Membre habitué
    Inscrit en
    Avril 2002
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    Points : 157
    Points
    157
    Par défaut
    essais un change directory avec un appel system
    il devrait te retourner 0 si il reussis ou -1 en cas d'echeque

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Le C++ n'a pas la notion de répertoire, donc tu n'auras rien en standard => faut passer par du spécifique. Y'a opendir dans <dirent.h>. Sous Windows GetFileAttributes & FILE_ATTRIBUTE_DIRECTORY.

  7. #7
    Membre habitué
    Inscrit en
    Avril 2002
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    Points : 157
    Points
    157
    Par défaut
    j'ai trouver opendir dans dirent.h sous ma redhat9 aussis

  8. #8
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Oui, j'ai pas précisé que c'est sous Linux. Sous Windows ça n'y est pas.

  9. #9
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut
    Merci beaucoup, ça marche !!

  10. #10
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut
    par contre, getcwd() ne fonctionne pas, même avec dirent.h... Y'a-t-il une autre fonction pour connaitre le répertoire de l'application lancée ?

  11. #11
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 65
    Points : 64
    Points
    64
    Par défaut
    Bonjour,
    2 solutions :
    ExtractFilePath(ParamStr(0))
    ou
    ExtractFilePath(Application->ExeName)

    Voilà voilà

  12. #12
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 65
    Points : 64
    Points
    64
    Par défaut
    A propos, ExtractFilePath retourne malheureusement le path sous la forme : drive\path\...\fichier.exe et non pas drive\\path\\...\\fichier.exe ce qui cause, comme vous pouvez l'imaginer, de jolies violations d'accès étant donné que j'utilise cette fonction dans un fopen xD
    Existe-t-il une fonction capable de remplacer les \ par des \\ dans la chaîne ?

  13. #13
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    std::replace fait ça très bien ( remplacer \ par \\, ou mieux : par /)

  14. #14
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 65
    Points : 64
    Points
    64
    Par défaut
    Merci bien !
    Je vais en fait utiliser SUBSTITUTE... ...mais je n'y arrive pas ^^"
    Erreur : call tu undefined ...etc
    Pourtant je suis bien dans std tout ça...
    Je ne comprend pas O_o
    (Idem pour REPLACE et toutes les fonctions du genre...)

  15. #15
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    SUBSTITUTE n'existe pas, tout comme REPLACE. C'est std::replace, et ça se trouve dans l'en-tête <algorithm>.

  16. #16
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 65
    Points : 64
    Points
    64
    Par défaut
    Merci pour l'en-tête, je n'avais pas trouvé.
    L'aide associé à mon compilo ne l'indique même pas...
    std::replace marche parfaitement maintenant
    Pour ce qui est de substitute, je pense que je vais créer la fonction moi-même. Après tout, ça ne pourra qu'améliorer mon apprentissage du C++
    Bye~

  17. #17
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Et... Elle ferait quoi cette fonction substitute :

  18. #18
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 65
    Points : 64
    Points
    64
    Par défaut
    Bah en fait mon but c'est de substituer tous les '\' par des '\\' (ou '/') dans une chaine dont le contenu n'est pas "prévisible".
    C'est pourquoi la fonction SUBSTITUTE décrite dans le fichier d'aide du compilo que j'utilise (C++ Builder 3, je sais ça date mais c'est tout ce qu'on m'a filé pour mon stage pour l'instant...) aurait été très utile.
    Description

    Replaces a specified part of a text string with another text string.

    Syntax

    SUBSTITUTE ( text, old_text, new_text [, instance] )

    Parameter Description
    text A text string that contains the text to replace. You can also specify a reference to a cell that contains text.
    old_text The text string to be replaced.
    new_text The replacement text.
    instance Specifies the occurrence of old_text to replace. If this argument is omitted, every instance of old_text is replaced.
    Examples

    This function returns "Second Quarter Results":

    SUBSTITUTE(“First Quarter Results”, “First”, “Second”)

    This function returns "Shipment 45, Bin 52":

    SUBSTITUTE(“Shipment 45, Bin 45”, “45”, “52”, 2)

    See Also

    REPLACE
    TRIM
    J'ai essayé avec algorithm.h , avec et sans std::, rien à faire
    Je suis sûr que mon erreur doit être absolument grotesque mais le ridicule ne tue pas
    A l'aide

  19. #19
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ce que je voulais dire, c'est que ta fonction SUBSTITUTE ressemblera fortement à std::replace . La seule différence c'est que là tu pourras aussi remplacer des sous-chaînes et non simplementdes caractères.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <algorithm>
    #include <string>
     
    std::string s = "C:\\Coucou\\CaVa";
    std::replace(s.begin(), s.end(), '\\', '/');
    Mais maintenant que j'y pense... Ca ne servirait pas à rien tout ça ? Car doubler l'anti-slash sert à insérer un simple slash dans une chaîne, ça ne sert que lorsque tu écris ta chaine "en dur" dans le code. Si tu obtiens une chaîne contenant des simples \ elle sera parfaitement valide.

  20. #20
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 65
    Points : 64
    Points
    64
    Par défaut
    C'est ce que je me disais aussi au début.
    J'ai beaucoup manipulé un pseudo-langage de prog pas très évolué ni connu où, comme tu dis, seule une chaîne "en dur" a besoin de respecter certaines règles pour être valide... Ca me paraissait bizarre que C++ n'en fasse pas de même.
    Après tout, peut-être ai-je cherché au mauvais endroit et que la chaîne n'a rien à voir dans le plantage de mon appli. Il faut quand même savoir que lorsque je remplace la ligne de code censé renvoyée le path par une chaîne en dur qui respecte bien les '\\' etc. tout marche comme sur des roulettes...
    A savoir, la manipulation de ma chaine ressemble à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcat(ExtractFilePath(ParamStr(0)).c_str(), "unfilename.ext")
    ...le tout dans un fopen en "wb" responsable du plantage (ça j'en suis certain).
    Tout ceci fait partie d'une fonction ayant pour but d'écrire dans un fichier situé dans le répertoire qui contient le .exe, lequel doit "s'adapter" à cet emplacement...).
    Je m'en vais chercher encore le temps que tu répondes

Discussions similaires

  1. Tester l'existence d'un répertoire VBA
    Par sebeni dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/06/2007, 18h50
  2. [make] existence d'un répertoire
    Par alex'l dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 20/03/2007, 15h04
  3. existance d'un répertoire
    Par jarod_bx dans le forum Access
    Réponses: 4
    Dernier message: 01/01/2006, 00h41
  4. Comment vérifier l'existence d'un répertoire ?
    Par Sydaze dans le forum Débuter
    Réponses: 2
    Dernier message: 30/06/2005, 11h34
  5. Vérifier l'existence d'un répertoire
    Par Crazyblinkgirl dans le forum ASP
    Réponses: 4
    Dernier message: 24/06/2004, 11h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo