是否可以从c ++中的.exe文件中获取数据?

时间:2015-08-16 23:21:39

标签: c++

我是C / C ++的新人,
所以基本上我想调用一个显示2个数字的.exe文件,并能够抓住这两个数字在我的代码中使用它们。 要调用.exe文件,我已经使用了系统命令,但我仍然无法获取.exe文件显示的那两个数字

char *files = "MyPath\file.exe";
system (files);

2 个答案:

答案 0 :(得分:2)

我认为这是更好的方法: 在这里,您只需创建新流程,并阅读流程为您提供的数据。我在OS X 10.11上使用.sh文件进行了测试,并且像魅力一样。我认为这可能也适用于Windows。

FILE *fp = popen("path to exe","r");
if (fp == NULL)
{
    std::cout << "Popen is null" << std::endl;
}else
{
    char buff[100];
    while ( fgets( buff, sizeof(buff), fp ) != NULL )
    {
        std::cout << buff;
    }
}

答案 1 :(得分:1)

您需要在C++字符串文字中转义反斜杠,以便:

// note the double "\\"
char* files = "MyPath\\file.exe";

或者只使用正斜杠:

char* files = "MyPath/file.exe";

它效率不高但是std::system可以将输出重定向到文件然后读取文件:

#include <cstdlib>
#include <fstream>
#include <iostream>

int main()
{
    // redirect > the output to a file called output.txt
    if(std::system("MyPath\\file.exe > output.txt") != 0)
    {
        std::cerr << "ERROR: calling system\n";
        return 1; // error code
    }

    // open a file to the output data
    std::ifstream ifs("output.txt");

    if(!ifs.is_open())
    {
        std::cerr << "ERROR: opening output file\n";
        return 1; // error code
    }

    int num1, num2;

    if(!(ifs >> num1 >> num2))
    {
        std::cerr << "ERROR: reading numbers\n";
        return 1; // error code
    }

    // do something with the numbers here
    std::cout << "num1: " << num1 << '\n';
    std::cout << "num2: " << num2 << '\n';
}

注意:(thnx @VermillionAzure)

  

请注意,由于独角兽,系统无处不在   环境。另外,shell可以彼此不同,例如cmd.exe   和bash。 - VermillionAzure

使用std::system时,结果取决于平台,并非所有shell都具有重定向或使用相同的语法甚至存在!