2

我试图让我的程序在退出之前将控制台应用程序的输出记录到文本文件中。这是一个启动控制台应用程序 (tool.exe) 的 GUI 程序。问题是我正在使用 CTRL + C 退出控制台应用程序。此控制台应用程序也无法更改。我尝试了几种方法,但似乎都没有奏效( tool.exe > output.txt )。

谁能指出我采取哪种方法的正确方向?这将不胜感激。

编辑:

该文件已创建,但它是空的并且不接收任何数据。不过,我注意到的是,如果我自己从命令行运行该工具,它将起作用。例如。c:\>tool.exe > output.txt但是,当它从我的 GUI 应用程序执行时,这不起作用。

这是我用来执行该工具的代码:

    strcpy (tool, "\" start /D \"");
    strcat (tool, toolLocation);
    strcat (tool, "\" tool.exe > output.txt\"");
    system (tool);

这将运行 tool.exe 并正常创建 output.txt,但不会向文件输出任何内容。

编辑2:

我认为实际发生的事情是因为我正在使用start,所以>output.txt正在输出start而不是tool.exe. 这可以解释为什么它会创建空文件。Start 只是运行一个新的命令行,然后运行tool.exe​​. 问题是,我现在该如何解决这个问题?

4

3 回答 3

0

尝试:

#include <signal.h>
void signal_handlerkill(int sig)
{
  //Do Soemthing
  exit(1);
}

int main()
{
  signal(SIGINT, signal_handlerkill); //Connect the interrupt signal (^C) to the function
  //Do your code here
  return 0;
}

如果这不起作用,我建议看这里。具体来说:

// crt_signal.c
// compile with: /c
// Use signal to attach a signal handler to the abort routine
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <tchar.h>

void SignalHandler(int signal)
{
    printf("Application aborting...\n");
}

int main()
{
    typedef void (*SignalHandlerPointer)(int);

    SignalHandlerPointer previousHandler;
    previousHandler = signal(SIGABRT, SignalHandler);

    abort();
}
于 2012-05-23T14:57:36.863 回答
0

如果您在不重定向到文件的情况下运行应用程序,当您按 ctrl+c 时,您是否在控制台上看到了所需的输出?

如果您不这样做,那么您无能为力,因为您无法更改应用程序。

更新

您需要将 stdout 和 stderr 重定向到文件。我从来没有这样做过,但 jamesdlin 似乎已经这样做了。看看他的评论。

您可以尝试的是直接使用starttry using而不是cmd.exe

于 2012-05-23T15:26:32.997 回答
0

这是设法为我解决问题的代码:

            char path[500]; //Create character array
            strcpy (path, "cd "); //Copy 'cd' into the array
            strcat (path, toolLocation); //Copy the path of the tool into the array
            strcat (path, " & ip.exe > output.txt"); //Append on the name of the exe and output to a file
            system (path); //Run the built array

我正在创建一个字符数组,然后附加到它。这里最重要的一点是&在系统调用中使用。这是在执行 .exe 之前作为and第一次 cd'ing 到 firectory 工作。

于 2012-06-12T08:59:33.100 回答