有没有办法创建一个公共输出流对象以在控制台上打印并在 C++ 中打印到文件?

2024-01-29

我正在编写一个代码,必须在控制台上打印相同的数据并打印到文件中。 有没有办法填充公共输出流对象,然后使用 cout 将其显示在控制台上,并使用 fstream 和 iostream 库将其导出到文件?


当然。您只需创建一个合适的流缓冲区,它可能存储到它内部写入的其他流缓冲区。然后使用这个流缓冲区创建一个std::ostream你正在写信给.

例如,以下是此方法的简单实现:

#include <streambuf>
#include <ostream>

class teebuf
    : public std::streambuf
{
    std::streambuf* sb1_;
    std::streambuf* sb2_;

    int overflow(int c) {
        typedef std::streambuf::traits_type traits;
        bool rc(true);
        if (!traits::eq_int_type(traits::eof(), c)) {
            traits::eq_int_type(this->sb1_->sputc(c), traits::eof())
                && (rc = false);
            traits::eq_int_type(this->sb2_->sputc(c), traits::eof())
                && (rc = false);
        }
        return rc? traits::not_eof(c): traits::eof();
    }
    int sync() {
        bool rc(false);
        this->sb1_->pubsync() != -1 || (rc = false);
        this->sb2_->pubsync() != -1 || (rc = false);
        return rc? -1: 0;
    }
public:
    teebuf(std::streambuf* sb1, std::streambuf* sb2)
        : sb1_(sb1), sb2_(sb2) {
    }
};

class oteestream
    : private virtual teebuf
    , public std::ostream {
public:
    oteestream(std::ostream& out1, std::ostream& out2)
        : teebuf(out1.rdbuf(), out2.rdbuf())
        , std::ostream(this) {
        this->init(this);
    }
};

#include <fstream>
#include <iostream>

int main()
{
    std::ofstream fout("tee.txt");
    oteestream    tee(fout, std::cout);
    tee << "hello, world!\n";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法创建一个公共输出流对象以在控制台上打印并在 C++ 中打印到文件? 的相关文章

  • C# 创建函数队列

    我写了一个名为 QueueManager 的类 class QueueManager Queue functionsQueue public bool IsEmpty get if functionsQueue Count 0 return
  • Accept() 是线程安全的吗?

    我目前正在用 C 语言为我正在做的课程编写一个简单的网络服务器 我们的一项要求是实现一个线程池来使用 pthread 处理连接 我知道我将如何粗略地执行此操作 在主线程中调用accept并将文件描述符传递给freee线程 但是我的朋友建议了
  • 如何从RichTextBox中获取显示的文本?

    如何获得显示的RichTextBox 中的文本 我的意思是 如果 RichTextBox 滚动到末尾 我只想接收那些对我来说可见的行 P S 获得第一个显示的字符串就足够了 您想使用 RichTextBox GetCharIndexFrom
  • 找到的程序集的清单定义与程序集引用不匹配

    我试图在 C Windows 窗体应用程序 Visual Studio 2005 中运行一些单元测试 但出现以下错误 System IO FileLoadException 无法加载文件或程序集 实用程序 版本 1 2 0 200 文化 中
  • Qt 计算和比较密码哈希

    目前正在 Qt 中为测验程序构建面向 Web 的身份验证服务 据我了解 在数据库中存储用户密码时 必须对其进行隐藏 以防落入坏人之手 流行的方法似乎是添加的过程Salt https en wikipedia org wiki Salt cr
  • 是否有像 gccxml 这样的用于生成包装器的 C 标头解析器工具?

    我需要为一种新的编程语言编写一些 C 标头包装器 并且想要类似 gccxml 的东西 但不完全依赖 gcc 以及它在 Windows 系统上带来的问题 只需要读C而不是C 只要有完整的文档记录 任何格式的输出都可以 Linux Solari
  • 存储过程上的 OdbcCommand - 输出参数上出现“未提供参数”错误

    我正在尝试执行存储过程 通过 ODBC 驱动程序针对 SQL Server 2005 但收到以下错误 过程或函数 GetNodeID 需要参数 ID 但未提供该参数 ID 是我的过程的 OUTPUT 参数 在存储过程中指定了一个输入 mac
  • 手动将 ClientBase 集合类型从 Array[] 更改为 List<>

    我将自己的 WCF 代理与 Client Base 一起使用 我想做一些类似于 svc util 中的 ct 属性的操作 并告诉代理返回 List 集合类型 我不能使用 List 因为实体由 nhibernate 管理 所以我必须使用 IL
  • 无法加载文件或程序集“EntityFramework,版本=6.0.0.0”

    我究竟做错了什么 我该如何解决这个问题 我有一个包含多个项目的解决方案 它是一个 MVC NET 4 5 Web 应用程序 在调试模式下启动后调用其中一个项目时 出现此错误 导致此错误的项目具有以下参考 两个都是版本6 0 0 0 应用程序
  • 防止GDB中的PLT(过程链接表)断点

    在最新版本的 GDB 中 在库函数调用上设置断点会导致多个实际断点 调用过程链接表 PLT 实际的函数调用 这意味着当调用库函数时 我们每次都会经历两次中断 在以前的 GDB 版本中 只会创建 2 因此您只能得到一次中断 那么问题来了 是否
  • 如何用 C 语言练习 Unix 编程?

    经过五年的专业 Java 以及较小程度上的 Python 编程并慢慢感觉到我的计算机科学教育逐渐消失 我决定要拓宽我的视野 对世界的一般用处 并做一些 对我来说 感觉更重要的事情就像我真的对机器有影响一样 我选择学习 C 和 Unix 编程
  • 系统错误 124 - SHFileOperation 的 ERROR_INVALID_LEVEL

    我在使用时遇到问题SHFileOperation SHFileOperation SHFILEOPSTRUCT https stackoverflow com questions 9191415 shfileoperation shfile
  • .NET JIT 编译的代码缓存在哪里?

    NET 程序首先被编译为 MSIL 代码 当它被执行时 JIT编译器会将其编译为本机机器代码 我想知道 这些JIT编译的机器代码存储在哪里 它只存储在进程的地址空间中吗 但由于程序的第二次启动比第一次快得多 我认为即使在执行完成后 该本机代
  • 如何使用收益返回和递归获得字母的每个组合?

    我有几个像这样的字符串列表 可能有几十个列表 1 A B C 2 1 2 3 3 D E F 这三个仅作为示例 用户可以从几十个具有不同数量元素的类似列表中进行选择 再举个例子 这对于用户来说也是一个完全有效的选择 25 empty 4 1
  • 从 C 线程调用 Python 代码

    我对从 C 或 C 线程调用 Python 代码时如何确保线程安全感到非常困惑 The Python 文档 http docs python org c api init html non python created threads似乎是
  • 如何获取 QIcon 的文件/资源​​路径

    假设我做了这样的事情 QIcon myIcon resources icon ico 我稍后如何确定该图标的路径 例如 QString path myIcon getPath 问题是 没有getPath 会员 我找不到类似的东西 但肯定有办
  • C++ [Windows] 可执行文件所在文件夹的路径[重复]

    这个问题在这里已经有答案了 我需要访问一些文件fstream在我的 Windows 上的 C 应用程序中 这些文件都位于我的exe文件所在文件夹的子文件夹中 获取当前可执行文件的文件夹路径的最简单且更重要的 最安全的方法是什么 Use 获取
  • 无法使 Polly 超时策略覆盖 HttpClient 默认超时

    我正在使用 Polly 重试策略 并且正如预期的那样 在重试过程中HttpClient达到 100 秒超时 我尝试了几种不同的方法来合并 Polly 超时策略 将超时移至每次重试而不是总计 但 100 秒超时仍然会触发 我读过大约 5 个
  • 新的 .NET 6 控制台模板中的 C# 函数重载不起作用

    我在尝试重载该函数时遇到错误Print object in the 新的 NET 6 C 控制台应用程序模板 https learn microsoft com en us dotnet core tutorials top level t
  • FindAsync 很慢,但是延迟加载很快

    在我的代码中 我曾经使用加载相关实体await FindAsync 希望我能更好地遵守 C 异步指南 var activeTemplate await exec DbContext FormTemplates FindAsync exec

随机推荐

  • 使用 WP_Query 仅显示库存产品中的 WooCommerce

    我有这个代码 它显示了最好的销售 但它也显示了没有库存的产品 我如何修改代码 以便它只显示有库存的产品 谢谢 best sellers args array post type gt product meta key gt total sa
  • Doctrine2 - 列在刷新之前更改为 null

    我正在尝试在数据库中插入新的对象 行 该对象是这样创建的 nodeaccess new Nodeaccess A by doctrine2 generated entity nodeaccess gt setAccesslevel 0 no
  • 使用 Swift Generics 识别子类适用于自定义类,但不适用于 UITapGestureRecognizer

    我想在 swift 中做一些事情 但我不知道如何实现它 那就是删除给定类类型的手势识别器 这是我的代码 和示例 我在 Xcode 7 beta 中使用 swift 2 0 5 我有 3 个继承自 UITapGestureRecognizer
  • 从入口点动态选择在主机上运行 Docker 的用户 GUI 和 UID

    我有以下脚本作为我的 Dockerfile 和 Docker 映像的入口点 bin bash set e Setup permissions data dir var www html usermod u 1000 www data gro
  • Powershell 添加成员。添加一个 ArrayList 成员?

    Powershell add member 命令非常有用 我用它来向自定义对象添加属性 有时我将一个成员设置为一个数组来保存多个对象 是否可以将 ArrayList 添加为自定义对象的成员 想象一下文章列表具有属性 索引 标题 和 关键字
  • 定义 uint64_t 常量的最佳/正确方法

    constexpr auto v static cast
  • 使用 python requests 模块时发生 LocationValueError

    我一直使用 requests 包与网络交互 过去没有遇到任何问题 最近 当我使用一个大约一周没有使用的脚本时 我在执行例程时遇到了以下错误requests get call LocationValueError No host specif
  • 向 ASP MVC 操作添加基本身份验证

    我有一个 ASP MVC 应用程序 它使用它自己的自定义身份验证机制 但是 一个控制器中只有一项操作需要使用基本身份验证进行保护 这个想法是 当点击这个特定操作的 URL 时 浏览器会弹出基本身份验证对话框 然后我需要在操作本身中输入用户名
  • 无限的游戏背景

    我正在开发一个 Java 项目来模拟直升机在框架中的飞行 直升机使用箭头键在屏幕上移动 我希望直升机能够无限移动 即当直升机到达画面边缘时 背景应该向相反的方向移动 以具有无尽地形的效果 这是我到目前为止的代码 import java aw
  • C# 中服务器端文件大小的限制

    我目前正在 MVC4 中上传文件 但在我的控制器中 我尝试将文件大小限制为最大 4MB 但收到以下警告 comparison to integral constant is useless using Haacks http haacked
  • python Ghostscript不关闭输出文件

    我正在尝试将一页或多页的 PDF 文件转换为每页的图像 这很像在这里找到的问题 https stackoverflow com questions 331918 converting a pdf to a series of images
  • iOS 推送通知:找不到有效连接

    我正在尝试在本地解析服务器上设置推送通知 尝试发送推送时出现此错误 parse server push adapter APNS cannot find vaild connection for 9a86 21 每个安装设备令牌都会重复该错
  • 如何从 Ant 将参数传递给 Junit 测试?

    我在Ant下使用Junit执行Selenium测试 我的测试用例需要读取文件 其中包含测试数据 以完成数据驱动测试 我不介意在测试用例中嵌入文件名 但我想知道该文件所在的目录的名称 数据文件参数化存储在 build xml 文件中 将此类信
  • 从泛型函数中的枚举获取 rawValue

    2015 年 8 月 28 日更新 这将在 Swift 2 中得到解决 See Swift 编译器开发人员在 Twitter 上的回应 https twitter com evermeer status 636791736191320064
  • Arel:来自 Arel::SelectManager 的带有 join 的活动关系

    让我们有一个 Rails 4 2 x 应用程序 我们有两个表 posts 和authors 我们想使用 Arel 来获取由 name Karl 的作者撰写的帖子 在本例中 我们可以对 Active Record 连接感到满意 但这只是为了使
  • Azure 网站上的经典 ASP 网站,远程 mysql 数据库

    我已将一个经典的 asp 网站复制到新的 Azure 网站 并尝试让它连接到远程 MySQL 数据库 远程数据库未托管在 Azure 上 我收到一条内部服务器错误消息 详细日志似乎表明我的连接字符串存在问题 当前字符串设置如下 databa
  • WPF 应用程序仅是托管代码吗?

    我想在应用程序中使用 WPF 我想用C 写它 是否必须管理应用程序 我知道我可以将托管与非托管混合在一起 我想知道是否可以让整个应用程序不受管理 您可以轻松地使用非托管代码开发 99 的 WPF 应用程序 但使其 100 不受托管是相当困难
  • 如果字符串中的项目与列表中的项目匹配,则替换该项目

    我正在尝试从字符串中删除与列表匹配的单词 x How I Met Your Mother 7x17 HDTV LOL VTV Mon 20 Feb 2012 tags HDTV LOL VTV x264 DIMENSION XviD 720
  • CGImageSourceCreateWithURL 始终返回 NULL

    我需要在不加载或下载图像的情况下读取图像的属性 事实上 我已经实现了一个简单的方法 使用 CGImageSourceCreateWithUrl 来完成此任务 我的问题是它总是返回错误 因为似乎 imageSource 为空 那么我能做些什么
  • 有没有办法创建一个公共输出流对象以在控制台上打印并在 C++ 中打印到文件?

    我正在编写一个代码 必须在控制台上打印相同的数据并打印到文件中 有没有办法填充公共输出流对象 然后使用 cout 将其显示在控制台上 并使用 fstream 和 iostream 库将其导出到文件 当然 您只需创建一个合适的流缓冲区 它可能