2016-08-22 24 views
3

私はコーディングに全く新しいです。私は自分の仕事のためにこれをやっているので、ベテランからアドバイスが必要です。cmd stringから文字列をコピーする方法はありますか?

コマンドプロンプト(CMD)で生成された文字列を読み取る方法はありますか?

私の仕事は、すべてのネットワークに対してpingを実行するコードを作成し、IPアドレスをアクティブ/非アクティブとして入出力ファイルを使って割り当てることです。

Iは、例えば、CMDから文字列をコピーしたかった:192.168.0.1から

返信:バイト= 32時間< 1msのTTL = 64 < - 192.168.0.2から(これはアクティブ示す) 応答:宛先ホスト到達不可能< - (これは非アクティブを示します)

もし私がその行をコピーできたら、If/Else条件を書いてそれらを区切ります。このシナリオを改善する簡単な方法があれば、私を助けてください。ありがとうございました。

以下のコードは、すべてのIPアドレスを255までpingすることですが、アクティブIPアドレスと非アクティブIPアドレスを分離する1つの機能がまだ必要です。

using namespace std; 

    void main() 
    { 
    string ipAddress; 

    cout << "Enter the IPv4 address network..." << endl; 
    cout << "Example: 10.0.0. or 192.168.1." << endl; 

    getline(cin, ipAddress); 
    cout << "Please wait..." << endl; 

    string s = "ping " + ipAddress; 

    for (int x = 0; x <= 255; ++x) 
      { 
        stringstream ss; 
        ss << x << endl; 
        string newString = ss.str(); 
        string finalString = s + newString; 

        system(finalString.c_str()); 
      } 

    system("pause"); 
    } 

P.S私はまた、あなたがpopen機能を使用することができますhttp://www.cplusplus.com/forum/beginner/196197/

+0

'std :: system()'コマンドの出力をキャプチャできますか? – Galik

答えて

1

に投稿してください。この機能を使用すると、コマンドの出力を読み取ることができます。

同様マーティンは、Windows上であなたは_popenを使用しますが、コメントで言う、MSDNのドキュメント:

msdn.microsoft.com/en-us/library/96ayss4b.aspx

このページからLinux用

参照くださいexemple:

http://www.sw-at.com/blog/2011/03/23/popen-execute-shell-command-from-cc/

+0

それはOPのためにはうまくいかないでしょう。彼は具体的には、MS Windowsのコマンドラインシェルである "CMD"と言います。彼は '_popen'(アンダースコアの先頭に注意)を使用する必要があり、https://msdn.microsoft.com/en-us/library/96ayss4b.aspxは仕様へのリンクです。 –

0

enter image description here

CMDからコピーする別の方法があります。

次のコードは、Windowsがsystem()

system("ping www.google.com > ping.txt ")

機能に建てられ、それが

ping www.google.com > ping.txt 

テキストファイルにコンソール画面からの出力をリダイレクトしてPING.EXEを所有して起動しますping.txtというファイルに格納します。ファイルを開くと、

//open text file ping.txt 
ifstream TextFile ("ping.txt"); 

が入力され、文字列ベクトルが表示されます。 vector<string> LinesFromtextFileに保存されているのpingからの内容で

// display ping results 
for (int i=0;i<LinesFromtextFile.size(); i++){ 
    cout<<""<< LinesFromtextFile[i] <<""; 
} 

、あなたはそれでやりたいことは自由です。

#include <windows.h> 
#include <iostream> 
#include <vector> 
#include <string> 
#include <fstream>  
using namespace std; 


int main() { 

    int j=0; 
    char *url = new char[256]; 
    string line; 
    vector<string> LinesFromtextFile; 

    memset(url,' ', sizeof(url)); 
    strcpy(url, "ping www.google.com > ping.txt "); 

    cout<<"\n\n"<< url <<"\n\n"; 

    // launch ping from visual c++ 
    system(url); 

    //open text file ping.txt 
    ifstream TextFile ("ping.txt"); 
    while (getline(TextFile, line)){ 

     // store lines from textfile into vector 
     LinesFromtextFile.push_back(line); 
     LinesFromtextFile[j] = LinesFromtextFile[j] +"\n"; 

     j++; 
    } 
    TextFile.close(); 

    // display ping results 
    for (int i=0;i<LinesFromtextFile.size(); i++){ 
     cout<<""<< LinesFromtextFile[i] <<""; 
    } 
    delete[] url; 


cout<<"\nPress ANY key to close.\n\n"; 
cin.ignore(); cin.get(); 
return 0; 
} 
0

何らかの理由であなたが_popen()を使用したくない場合は、別の方法があります:
あなたは、ファイルへのpingの出力をリダイレクトする>filename構文を使用することができます。

たとえば、std::system("ping 8.8.8.8 >out.txt")は、pingを呼び出して、出力をout.txtに書き込みます。

この機能はWindowsシェル自体の一部です。したがって、どのプログラムでも動作します。

関連する問題