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
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
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
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
essais un change directory avec un appel system
il devrait te retourner 0 si il reussis ou -1 en cas d'echeque
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.
j'ai trouver opendir dans dirent.h sous ma redhat9 aussis
Oui, j'ai pas précisé que c'est sous Linux. Sous Windows ça n'y est pas.
Merci beaucoup, ça marche !!
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 ?
Bonjour,
2 solutions :
ExtractFilePath(ParamStr(0))
ou
ExtractFilePath(Application->ExeName)
Voilà voilà
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 ?
std::replace fait ça très bien ( remplacer \ par \\, ou mieux : par /)
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
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...)
SUBSTITUTE n'existe pas, tout comme REPLACE. C'est std::replace, et ça se trouve dans l'en-tête <algorithm>.
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
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~
Et... Elle ferait quoi cette fonction substitute :
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
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.
J'ai essayé avec algorithm.h , avec et sans std::, rien à faireDescription
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
Je suis sûr que mon erreur doit être absolument grotesque mais le ridicule ne tue pas
A l'aide
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.
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.
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(), '\\', '/');
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
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 :
...le tout dans un fopen en "wb" responsable du plantage (ça j'en suis certain).
Code : Sélectionner tout - Visualiser dans une fenêtre à part strcat(ExtractFilePath(ParamStr(0)).c_str(), "unfilename.ext")
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager