在Wi32上 我正在尝试启动一个可重定向到文件名(当前日期)的可执行文件,例如同样如下:
Someexecutable.exe> 20101220000000.txt
当我从windows cmd.exe执行此操作时,一切正常。但是当从我的程序执行此操作时,如下所示,系统似乎要么删除重定向,即使它创建文件和/或它似乎在刷新到磁盘之前缓冲大量数据。 我无法更改正在运行的可执行文件。 现在执行的程序只写入stdout,但请记住我根本无法改变它。 (最简单的方法就是做stdout = filehandle;但我现在对我来说这是不可能的!)
(不是必需的:程序也等同于system()这不是必需的,但是分离正在通过system()运行的程序的最简单方法是什么)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{
char execstr[512];
char s[30];
size_t i;
struct tm tim;
time_t now;
now = time(NULL);
tim = *(localtime(&now));
i = strftime(s,30,"%Y%m%d%H%M",&tim);
sprintf(execstr,"someexecutable.exe > %s.txt",s);
printf("Executing: \"%s\"\n",execstr);
system(execstr);
exit(0);
return 0;
}
答案 0 :(得分:2)
我认为没有任何理由不起作用,但如果您遇到这种情况,则替代解决方案之一可能是使用popen然后从管道中读取以在所需文件中写入。这是一些在屏幕上打印的示例代码。您可以根据需要将其写入文件而不是屏幕/控制台。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{
char execstr[512];
char s[30];
size_t i;
struct tm tim;
time_t now;
char buf[128];
FILE *pipe;
now = time(NULL);
tim = *(localtime(&now));
i = strftime(s,30,"%Y%m%d%H%M",&tim);
#if 0
sprintf(execstr,"a.exe > %s.txt",s);
printf("Executing: \"%s\"\n",execstr);
#endif /* #if 0 */
if( (pipe = _popen("a.exe", "rt")) == NULL )
exit( 1 );
while(!feof(pipe))
{
if (fgets(buf, 128, pipe) != NULL )
printf(buf); /* write to the required file here */
}
_pclose(pipe);
return 0;
}
答案 1 :(得分:0)
您的程序适合我(在VS 2010中测试)。如果在IDE中运行测试,可能会遇到的一些问题是:
someexecutable.exe
如果您更改了程序,则sprintf()
调用的行如下所示:
sprintf(execstr,"someexecutable.exe",s);
您是否在控制台窗口中看到someexecutable.exe
的输出?