Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将带有参数的程序输出重定向到文件_C++_Redirect_Count - Fatal编程技术网

C++ 将带有参数的程序输出重定向到文件

C++ 将带有参数的程序输出重定向到文件,c++,redirect,count,C++,Redirect,Count,我经营一家公司 $myprogram.exe 哪个主函数签名是intmain(intargc,char*argv[]) 程序获取一个参数作为目录路径,并对其中的文件进行一些处理。 在处理过程中,它将一些结果打印到stdout(或stderr)。 我想将这些结果重定向到该文件。因此,我按如下方式运行我的程序: $myprogram.exe C:\dir>res.txt 结果仍打印到屏幕上,res.txt仍为空。 如何解决此问题?您的程序可能会将结果打印到标准错误流(stderr),而不是标准输出流

我经营一家公司

$myprogram.exe

哪个主函数签名是
intmain(intargc,char*argv[])
程序获取一个参数作为目录路径,并对其中的文件进行一些处理。 在处理过程中,它将一些结果打印到stdout(或stderr)。 我想将这些结果重定向到该文件。因此,我按如下方式运行我的程序:

$myprogram.exe C:\dir>res.txt

结果仍打印到屏幕上,
res.txt
仍为空。
如何解决此问题?

您的程序可能会将结果打印到标准错误流(
stderr
),而不是标准输出流(
stdout

要重定向stderr(即文件描述符
2
),请使用

如果要重定向
stdout
stderr
,应该将它们重定向到不同的文件,如

myprogram.exe C:\dir > res.txt 2> errors.txt
或者将一个流重定向到另一个流,并将后者重定向到文件

myprogram.exe C:\dir >res.txt 2>&1 

您的程序可能将结果打印到标准错误流(
stderr
),而不是标准输出流(
stdout

要重定向stderr(即文件描述符
2
),请使用

如果要重定向
stdout
stderr
,应该将它们重定向到不同的文件,如

myprogram.exe C:\dir > res.txt 2> errors.txt
或者将一个流重定向到另一个流,并将后者重定向到文件

myprogram.exe C:\dir >res.txt 2>&1 

需要记住的一点是“>”操作符将stdout重定向到输出屏幕,而不是stderr,为了重定向stderr,您还需要写入2>res.txt,因此它应该是1>res.txt 2>res.txt, 我没有尝试,因为重定向到同一个文件,所以可能会出现错误,所以更安全的方法是:
1> res.txt 2>&1

需要记住的一点是“>”操作符将stdout重定向到输出屏幕,而不是stderr,为了重定向stderr,您也需要写入2>res.txt,因此它应该是1>res.txt 2>res.txt, 我没有尝试,因为重定向到同一个文件,所以可能会出现错误,所以更安全的方法是:
1 > R.TXT 2>1<P>P。由于这个问题是用C++标记来询问的,这里是怎样将输出重定向到<代码>:ST::CUT和 STD::CURR < /代码>,从程序中(这是一个有点麻烦的代码泄漏了一个指向<代码> STD::FILEBUF 但如果必要的话,这是可以避免的):


<>当然,这只适用于输出到标准C++流对象的输出,即它不会重定向到<代码> STDUD> < /COD>或 STDRR > > < /P> < P>,因为这个问题是用C++标签来询问的,这里是如何将输出重定向到 STD::CUT
STD::CURR < /代码>。(代码泄漏了指向
std::filebuf
的指针,这有点像黑客,但如果必要,可以防止这种情况发生):


< >当然,这只适用于输出到标准C++流对象的输出,即它不会重定向到<代码>输出的STDUD> <代码>或<代码> STDRR .< /P> < P>正确发送参数,如果您想同时发送 STDUD> < /C> >和<代码> STDRR >文件使用:

$myprogram.exe“C:\dir”>rest.txt 2>&1


您可以在
符号之前使用要重定向的文件描述符的数量。当我们使用
2>&1
时,文件描述符
2
stderr
)被重定向到文件描述符
ONE
,该描述符使
stderr
输出结果显示为
stdout

正确发送参数,如果要同时将
stdout
stderr
发送到文件,请使用:

$myprogram.exe“C:\dir”>rest.txt 2>&1


您可以在
符号之前使用要重定向的文件描述符的数量。当我们使用
2>&1
时,文件描述符
2
stderr
)被重定向到文件描述符
ONE
,它使
stderr
输出结果显示为
stdout

。表面上看,您的程序似乎写入
stderr
,而不是
stdout
。至少在Unix上,
符号只重定向
stdout
。您在Windows上使用的是哪个shell?
cmd.exe
或其他什么?这很重要,因为
stderr
的重定向取决于您正在使用的shell。在Bourne/Korn/Bash shell中,您可以使用
>res.txt 2>&1
stdout
stderr
重定向到同一个文件,或者将
>res.txt 2>res.err
用于两个单独的文件表面上看,您的程序似乎是写入
stderr
,而不是
stdout
。至少在Unix上,
符号只重定向
stdout
。您在Windows上使用的是哪个shell?
cmd.exe
还是其他什么?这很重要,因为
stderr
的重定向取决于您正在使用的hich shell。在Bourne/Korn/Bash shell中,您可以使用
>res.txt 2>&1
stdout
stderr
都放在同一个文件中,或者将
>res.txt 2>res.err
放在两个单独的文件中。@JonathanLeffler,是的。至少在Windows 7上。
cmd
并不像人们过去认为的那样愚蠢。@JonathanLeffler,是的。至少在Windows 7上。
cmd
并不像人们过去认为的那样愚蠢。好吧,这不会起作用,因为命令处理器会想打开同一个文件,从
stdout
stderr
写入两次,然后失败。是的,你是对的,我没有想到这一点,我只想指出stderr也需要重新编写ected,谢谢你指出错误,我会注意到:)和+1投票支持你的答案。好吧,这不会起作用,因为命令处理器会想打开同一个文件,从
stdout
stderr
写入两次,然后失败。是的,你是对的,我没有想过,我只想指出