有一个巧妙的技巧可用于在 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_iterator
与 std::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/