2016-08-22 148 views
3

我完全不熟悉編碼。我需要老手的建議,因爲我爲我的任務做了這些。有沒有辦法從cmd字符串複製字符串?

有沒有辦法讀取由命令提示符(CMD)生成的字符串?

我的任務是創建一個代碼來ping所有網絡,並通過輸入/輸出將文件分配爲活動和非活動狀態。

我想的字符串從CMD複製例如:

從192.168.0.1答覆:字節= 32時間< 1ms的TTL = 64 < - (這表明活性)從192.168.0.2 答覆:目標主機無法到達< - (這表明不活動)

如果我能夠複製該行,我可以編寫一個If/Else條件來分隔它們。如果有更簡單的方法來改善這種情況,請幫助我。謝謝。

下面的代碼是ping所有IP地址直到255,但我仍然需要1個更多的功能來分隔活動和非活動IP地址。

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我也張貼在http://www.cplusplus.com/forum/beginner/196197/

+0

你希望能夠捕獲你的'std :: system()'命令的輸出嗎? – Galik

回答

1

可以使用popen功能。該功能允許您讀取命令的輸出。

像馬丁說,在評論,在Windows中,您將使用_popen,MSDN文檔:

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

見爲例for Linux的這個頁面:

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

+0

這對OP不起作用。他特別說「CMD」是MS Windows命令行shell。他需要使用'_popen'(注意前導下劃線),https://msdn.microsoft.com/en-us/library/96ayss4b.aspx是該規範的鏈接。 –

0

enter image description here

這是從CMD複製的另一種方法。

下面的代碼啓動Windows自帶的ping.exe的與內置的功能system()

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

,並從控制檯屏幕輸出重定向到一個文本文件

ping www.google.com > ping.txt 

並將其存儲在名爲ping.txt的文件中。然後打開該文件

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

並放入一個字符串向量並顯示。

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

與存儲在vector<string> LinesFromtextFile ping操作的內容,你可以自由地做你想做的事情是什麼。

#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(),還存在另一種方式:
您可以使用>filename語法的ping輸出重定向到一個文件中。例如,std::system("ping 8.8.8.8 >out.txt")將調用ping並將其輸出寫入out.txt

此功能是Windows外殼本身的一部分,因此它將適用於任何程序。

相關問題