C++ 将std:cout重定向到std::of流,获取错误
我将标准输出数据重定向到std::ofstream缓冲区,以便将数据写入文件。下面的代码实现了这一点C++ 将std:cout重定向到std::of流,获取错误,c++,qt,security,azure,c++11,C++,Qt,Security,Azure,C++11,我将标准输出数据重定向到std::ofstream缓冲区,以便将数据写入文件。下面的代码实现了这一点 if ( isActive ){ try{ std::string traceFileName = "traceLog"+getTime()+".log"; std::ofstream out(traceFileName.c_str()); std::streambuf *countbuf = std::cout.rdbuf();
if ( isActive ){
try{
std::string traceFileName = "traceLog"+getTime()+".log";
std::ofstream out(traceFileName.c_str());
std::streambuf *countbuf = std::cout.rdbuf();
std::cout.rdbuf ( out.rdbuf() ) ;
std::cout<<"buffer pointed\n"<<std::endl;
}
没有收到答复。可能的原因包括:远程应用程序未发送回复、消息总线安全策略阻止了回复、回复超时过期或网络连接中断
(进程:10365):GConf警告**:客户端未能连接到D-BUS守护进程:
没有收到答复。可能的原因包括:远程应用程序未发送回复、消息总线安全策略阻止了回复、回复超时过期或网络连接中断
(进程:10365):GConf警告**:客户端未能连接到D-BUS守护进程:
没有收到答复。可能的原因包括:远程应用程序未发送回复、消息总线安全策略阻止了回复、回复超时过期或网络连接中断。
QGtkStyle无法检测当前的GTK+主题。
Qt:会话管理错误:不支持指定的任何身份验证协议
但是如果我把下面的代码放在main中
std::string traceFileName = "traceLog"+getTime()+".log";
std::ofstream out(traceFileName.c_str());
std::streambuf *countbuf = std::cout.rdbuf();
std::cout.rdbuf ( out.rdbuf() ) ;
运行时所有std::cout数据都在文件中写入。ut抛出以下错误。如何解决此错误
enter code here(process:10777): GConf-WARNING **: Client failed to connect to the D-BUS daemon:
没有收到答复。可能的原因包括:远程应用程序未发送回复、消息总线安全策略阻止了回复、回复超时过期或网络连接中断
(进程:10777):GConf警告**:客户端未能连接到D-BUS守护进程:
没有收到答复。可能的原因包括:远程应用程序未发送回复、消息总线安全策略阻止了回复、回复超时过期或网络连接中断
(进程:10777):GConf警告**:客户端未能连接到D-BUS守护进程:
没有收到答复。可能的原因包括:远程应用程序未发送回复、消息总线安全策略阻止了回复、回复超时过期或网络连接中断。
QGtkStyle无法检测当前的GTK+主题。
Qt:会话管理错误:指定的身份验证协议均不受支持问题在于,在离开创建文件流的作用域之前,缓冲区未被还原
std::cout
仍将保留一个指向它最终尝试写入的缓冲区的指针
我认为一个选项是使变为
静态
,另一个选项是创建一个类,在离开作用域时将原始缓冲区重新分配给std::cout
:
class buffer_restore
{
public:
buffer_restore(std::ios& _ios)
: ios(_ios)
, sbuf(_ios.rdbuf())
{ }
~buffer_restore()
{
ios.rdbuf(sbuf);
}
private:
std::ios& ios;
std::streambuf* sbuf;
};
下面是一个如何使用它的示例:
{
buffer_restore br(std::cout);
std::ofstream out(traceFileName.c_str());
std::streambuf* countbuf = std::cout.rdbuf(out.rdbuf());
} // std::cout's buffer is restored to the original when br was constructed
函数退出时,函数变量将被销毁
cout
在发生这种情况之前永远不会恢复到其原始状态,并且正在使用一个不再存在的缓冲区,因为ostream
也会被销毁。这是我唯一能想到的atm。我有一个.cpp文件,我在这个项目中实现了我的。我想要的是,在我的项目中,std::cout所在的任何地方,它都会打印文件中的数据,并带有时间戳。@user2422669然后您可能希望使文件流静态
,或者使用命令行重定向(例如,在linuxmain.cpp>>file.txt中)。我相信你之前已经得到了一个答案,告诉你如何制作时间戳。你在实现这一点上有困难吗?
class buffer_restore
{
public:
buffer_restore(std::ios& _ios)
: ios(_ios)
, sbuf(_ios.rdbuf())
{ }
~buffer_restore()
{
ios.rdbuf(sbuf);
}
private:
std::ios& ios;
std::streambuf* sbuf;
};
{
buffer_restore br(std::cout);
std::ofstream out(traceFileName.c_str());
std::streambuf* countbuf = std::cout.rdbuf(out.rdbuf());
} // std::cout's buffer is restored to the original when br was constructed