2012-05-23 29 views
2

我试图让我的程序在退出之前将控制台应用程序的输出记录到文本文件。这是启动控制台应用程序(tool.exe)的GUI程序。问题是我正在使用CTRL + C来退出控制台应用程序。这个控制台应用程序也不能改变。我已经尝试了几个方法来做到这一点,但似乎没有任何工作(tool.exe> output.txt)。C++在退出WINAPI之前将控制台输出保存到文本文件中(无MFC)

任何人都可以指出我采取哪种方法的正确方向?这将不胜感激。

编辑:

被创建的文件,但它是空的,没有接收到任何数据。我注意到的事情是,如果我自己从命令行运行该工具,它会起作用。例如。 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的罚款,但不会产生任何输出到文件中。

EDIT2:

我认为什么是真正发生的是,因为我使用start,该>output.txt是outputing start代替tool.exe。这可以解释为什么它会创建空文件。开始只是运行一个新的命令行,然后运行tool.exe。问题是,我现在怎么解决这个问题?

+1

我刚刚试过''ping stackoverflow.com/t> test.txt'',用Ctrl-C结束它,它的工作原理应该如此。 –

+0

@Agent_L'ping'处理中断信号并在退出前输出最终结果。 – Drise

+0

@Drise很久以前,文件在旅途中随时更新。 –

回答

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 

我创建一个字符数组,然后追加到它。这里至关重要的是系统调用中使用的&。这是作为一个and,并在执行.exe之前首先进入firetry。

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; 
} 

如果不工作,我会建议找here。具体做法是:

// 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(); 
} 
+1

Windows变体是'SetConsoleCtrlHandler'参见[MSDN CTRL + C和CTRL + BREAK Signals](http: //msdn.microsoft.com/en-us/library/windows/desktop/ms682541%28v=vs.85%29.aspx) – RedX

+0

你知道......我刚刚注意到,我刚刚发布的摘录实际上正在做什么我已经建议......噢。 – Drise

+0

如果他可以修改程序,这将会很有用。 –

0

如果运行不重定向到一个文件的应用程序,你看,当你按Ctrl + C,你需要在控制台上输出?

如果你不这样做,那么你不能做任何事情,因为你不能改变应用程序。

更新

你需要的是输出和错误重定向到文件。我从来没有这样做,但jamesdlin似乎已经这样做了。看看他的评论。

你可以尝试的是,而不是使用start直接尝试使用cmd.exe

+0

该工具持续运行,CTRL + C是退出它关闭控制台窗口的唯一方法(就像Airodump在回溯中)。它将其吐出的网络数据运行到控制台。这是我正在尝试登录文件。 – L337BEAN

+0

我认为这是理解的。通常在控制台中看到的这部分是否在文件中不可用?文件中是否出现任何内容,或仅仅是您期望的最后几行? – RedX

+0

我已更新我的原始问题以回应您的评论。 – L337BEAN

相关问题