Changer le répertoire actuel sous Linux en utilisant C ++

J’ai le code suivant:

#include  #include  #include  using namespace std; int main() { // Variables ssortingng sDirectory; // Ask the user for a directory to move into cout << "Please enter a directory..." <> sDirectory; cin.get(); // Navigate to the directory specified by the user int chdir(sDirectory); return 0; } 

Le but de ce code est assez explicite: définir un répertoire spécifié par l’utilisateur comme répertoire courant. Mon plan est d’effectuer des opérations sur les fichiers qu’il contient. Toutefois, lorsque je tente de comstackr ce code, je reçois l’erreur suivante

 error: cannot convert 'std::ssortingng' to 'int' in initialization 

avec référence à la ligne de lecture int chdir(sDirectory) . Je viens juste de commencer la programmation et je commence seulement à avoir à connaître les fonctions spécifiques à la plate-forme, celle-ci étant la plus appropriée.

int chdir(sDirectory); n’est pas la syntaxe correcte pour appeler la fonction chdir . C’est une déclaration d’un int appelé chdir avec un initialiseur de chaîne non valide (`sDirectory).

Pour appeler la fonction, il vous suffit de faire:

 chdir(sDirectory.c_str()); 

Notez que chdir prend un const char* , pas un std::ssortingng , vous devez donc utiliser .c_str() .

Si vous voulez conserver la valeur de retour, vous pouvez déclarer un entier et utiliser un appel chdir pour l’initialiser, mais vous devez lui donner un nom:

 int chdir_return_value = chdir(sDirectory.c_str()); 

Enfin, notez que dans la plupart des systèmes d’exploitation, le répertoire actuel ou actif ne peut être défini que pour le processus lui-même et les enfants qu’il crée. Cela n’affecte (presque) jamais le processus qui a engendré le processus modifiant son répertoire actuel.

Si vous pensez que le répertoire de travail de votre shell sera modifié une fois que votre programme sera terminé, vous serez probablement déçu.

 if (chdir(sDirectory.c_str()) == -1) { // handle the wonderful error by checking errno. // you might want to #include  to access the errno global variable. } 

Le problème est que vous êtes une chaîne pour passer une chaîne STL à chdir (). chdir () nécessite une chaîne de style C, qui est juste un tableau de caractères terminé par un octet NUL.

Ce que vous devez faire est chdir(sDirectory.c_str()) qui le convertira en une chaîne de style C. Et aussi le int on int chdir(sDirectory); n’est pas nécessaire