使用C ++获取,更新和更改当前工作目录

时间:2017-09-20 00:09:30

标签: c++

所以我现在正在上大学课程,以了解更多关于C ++的知识,我现在已经尝试了一下。无论如何,我正在尝试通过C ++虚拟化命令shell。我有一点问题,我正在尝试做一些事情,它允许我获得CWD并在每次提交新命令时更新它然后如果使用命令'cd',它将手动更改当前工作目录并将其更新为C ++代码中新选择的目录。这是我遇到问题的代码..

while (true) {
    std::string cmd; std::wcout << name; std::cout << "@" << CurDir << "> "; // This is designed to print out the entire command shell ex:(willi@C:\development\ConsoleApplication1\Debug> )
    std::getline(std::cin, cmd); // Accept a string and use as our command to execute
    if ((cmd.substr(0, cmd.find(" ")) == "cd")) // Check if the inputted string contains the command 'cd' in it
        _chdir(cmd.substr(3, cmd.find(" ")).c_str()); // Change current working directory via C++ code
    else
        std::cout << exec(cmd.c_str()) << std::endl; // If 'cd' wasn't detected in the command to execute, just pipe it over to our execution method
}

我正在使用此行获取当前目录:

const std::string CurDir = std::experimental::filesystem::current_path().string();

我似乎无法做到正确。我希望能够在我的applet中执行此操作:

user1@C:\development\ConsoleApplication1\ConsoleApplication1> dir
 ...
user1@C:\development\ConsoleApplication1\ConsoleApplication1> cd ..
user1@C:\development\ConsoleApplication1> dir
 ...
user1@C:\development\ConsoleApplication1>

事情是,它不会完成我需要做的事情。 我发现一些C#代码几乎完全相同,如果我能找到如何在C ++中实现它就太棒了!

https://github.com/BlackVikingPro/aresdoor/blob/master/Program.cs#L65

1 个答案:

答案 0 :(得分:0)

哎呀,好吧没关系我找到了一种方法来改变这个以编程方式捕获当前工作目录:

std::string cmd; std::wcout << name; std::cout << "@" << CurDir << "> ";

为:

std::string cmd; std::wcout << name; std::cout << "@"; std::wcout << _getcwd(NULL, 0); std::cout << "> ";

我猜CurDir变量只捕获了启动它的程序目录?无论如何,我得到了解决方案,按照您的意愿使用:)