2017-09-20 7 views
-1

私は現在、C++の詳細を学ぶために大学のコースを受講しています。とにかく、私はC++でコマンドシェルを仮想化しようとしています。私は少し問題がありますが、新しいコマンドが送信されるたびにCWDを取得して更新することができるようにしようとしています。コマンド 'cd'が使用された場合、手動で現在の作業ディレクトリを変更し、C++コード内で新しい作業ディレクトリに更新します。私は、現在のディレクトリを取得するには、このラインを使用していますここで私は..C++で現在の作業ディレクトリを取得、更新、変更する

while (true) { 
    std::string cmd; std::wcout << name; std::cout << "@" << CurDir << "> "; // This is designed to print out the entire command shell ex:([email protected]:\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(); 

私は右かかわらず、それを得るように見えることはできません。私は私のアプレットでこれを行うことができるようにしたい:

[email protected]:\development\ConsoleApplication1\ConsoleApplication1> dir 
... 
[email protected]:\development\ConsoleApplication1\ConsoleApplication1> cd .. 
[email protected]:\development\ConsoleApplication1> dir 
... 
[email protected]:\development\ConsoleApplication1> 

事はそれだけで私はそれが何をする必要があるかを通過しないことです。 C++で実装する方法を知ることができれば、まったく同じことをするC#コードが見つかりました。

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

+0

関連性:取得するために 'std :: experimental :: filesystem :: current_path'を使用しているので、なぜ設定しないのでしょうか? – user4581301

+0

*それは私がそれが必要なものと一緒に行かない*有用な問題の説明ではありません。あなたは特定の問題を記述しておらず、どんな質問もしていません。 **具体的に**あなたが抱えている難しさは何ですか?**特定の問題**が今日あなたに何を手伝ってくれるでしょうか? –

答えて

0

おっと、[OK]を私はこれを変更することにより、プログラム的に現在の作業ディレクトリをキャプチャする方法を見つけた気にしない:

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変数を推測それが開始されたプログラムのディレクトリだけをキャプチャしましたか?とにかく、私はあなたが望むように解決策を得ました:)

+0

もう一度バグを見つけてください。私は 'cd ..'を実行してcwdを終了することができますが、 'cd C:\ development'などを実行してディレクトリに戻ることはできません。だけでなく、それは私を新しいディレクトリに連れて行かないでしょうが、今も-_-を変更していないかのように表示しません。 –

+0

パーサーは、見た目ほど簡単ではありません。あなたは、楽しい逸脱事例のすべてを追跡するのに役立つ少しのフローチャートまたはステートマシンを作成したいかもしれません。 – user4581301

関連する問題