【发布时间】:2021-10-01 06:40:47
【问题描述】:
有一个巧妙的技巧可以用来在 C++ 中复制文件内容。如果我们有一个std::ifstream input; 用于一个文件,std::ofstream output; 用于第二个文件,则input 的内容可以像这样复制到output:
output << input.rdbuf();
此解决方案复制整个第一个文件(或至少复制尚未使用的整个input 流)。我的问题是,如何仅将输入流的前缀(n 第一个字节)复制到输出流?
查看a bit of documentation后,我的想法是想办法缩短输入流,然后将其复制到输出流:
input.rdbuf()->pubsetbuf(input.rdbuf()->eback(), length_to_output);
output << input.rdbuf();
问题是,这不会编译为eback 不是public。这只是为了说明我的想法。我知道我可以将整个输入复制到一个字符串中,然后将它的一个子字符串复制到输出中,但我担心它会降低时间和内存效率。因此,我考虑使用流来代替,就像上面一样。
【问题讨论】:
-
“输入流的一部分”是什么意思?一些初始部分?一些尾随部分?中间的某个部分?您如何准确地定义复制哪个“输入流的一部分”?
-
@SamVarshavchik 我的意思是
n流的第一个字节。我会更新问题。
标签: c++ linux file file-io stream