c++ - 如何在 C++ 中将输入流的前缀复制到不同的流?

标签 c++ linux file file-io stream

有一个巧妙的技巧可用于在 C++ 中复制文件内容。如果我们有一个用于一个文件的 std::ifstream input; 和一个用于第二个文件的 std::ofstream output;,则 input 的内容> 可以复制到输出,如下所示:

output << input.rdbuf();

此解决方案复制整个第一个文件(或至少复制尚未使用的整个输入流)。我的问题是,如何仅将输入流的前缀(n 个前字节)复制到输出流?

浏览完a bit of documentation后,我的想法是以某种方式缩短输入流,然后将其复制到输出流:

input.rdbuf()->pubsetbuf(input.rdbuf()->eback(), length_to_output);
output << input.rdbuf();

问题是,这不会编译,因为 eback 不是 public。这只是为了说明我的想法。我知道我可以将整个输入复制到一个字符串中,然后将其子字符串复制到输出中,但我担心这会降低时间和内存效率。因此,我考虑使用流来代替,就像上面一样。

最佳答案

如果您想复制输入流的前 length_to_output 字节,您可以使用 std::istream_iterator和一个std::ostream_iteratorstd::copy_n 一起:

std::copy_n(std::istream_iterator<char>(input),
            length_to_output,
            std::ostream_iterator<char>(output));

关于c++ - 如何在 C++ 中将输入流的前缀复制到不同的流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68510988/

相关文章:

linux - Linux如何更新进程表?

c++ - 如何将文件选择限制为单个目录?

java - 遍历目录时,如果识别出子目录,如何在其中创建空文件。

c++ - 为什么派生类没有vtable指针而是使用基类的vtable?

c++ - 基数或 [[no_unique_address]] 成员的填充是否可用于存储其他基数/成员?

Python BeautifulSoup & 问题 Mac 与 Linux Ubuntu

linux - ipv6 模式下的网桥

c++ - 在 C++ 中关闭 ofstream 时出现段错误

c++ - 查找所有组合,使用索引 j 之前的至少 n 个项目

c++ - 类和成员函数(初学者)