C ++从用户输入更改工作目录

时间:2012-05-29 01:46:05

标签: c++ directory environment-variables c-str

我正在设计一个模拟shell程序,我无法完全模仿“cd”命令。我试过chdir(),但那不起作用,所以我继续试图改变环境变量“PWD =”

这就是我所拥有的,我认为这可能很接近。 (如果我错了或与chdir()接近,请拜托,纠正我)

else if (command == "cd")
        {
            string pathEnv = "PWD=";
            string newDir;
            cin >> newDir;
            pathEnv+=newDir;
            cout << pathEnv << endl;
            putenv(pathEnv.c_str());
        }

希望命令是“cd / user / username / folder”,而我的pathEnv变量将是“PWD = / user / username / folder”,这可能会改变目录?

非常感谢任何见解。

2 个答案:

答案 0 :(得分:5)

chdir()应该是您正在寻找的命令。在设置后,您是否使用getcwd()来获取当前工作目录?


以下代码对我有用。

#include <iostream>
#include <string>
#include <sys/param.h>
#include <unistd.h>

...

if (command == "curr") {
    char buffer[MAXPATHLEN];
    char *path = getcwd(buffer, MAXPATHLEN);
    if (!path) {
        // TODO: handle error. use errno to determine problem
    } else {
        string CurrentPath;
        CurrentPath = path;
        cout << CurrentPath << endl;
    }
} else if (command == "cd") {
    string newDir;
    cin >> newDir;
    int rc = chdir(newDir.c_str());
    if (rc < 0) {
        // TODO: handle error. use errno to determine problem
    }
}

getcwd()有三个版本:

char *getcwd(char *buf, size_t size);
char *getwd(char *buf);
char *get_current_dir_name(void);

有关使用的详细信息,请参阅unix手册页。

答案 1 :(得分:1)

您总是希望在代码中使用系统调用,而不是“模拟”系统可能正在执行的操作,例如更改PWD。如果您使用的是高级UNIX系统,则应使用chdir或在Windows Box上使用SetCurrentDirectory调用。我不是Windows开发人员,但是我发现了这个链接。 http://msdn.microsoft.com/en-us/library/windows/desktop/aa363806%28v=vs.85%29.aspx