Sou*_*ity 8 c++ string fstream iostream ifstream
如何从fstream到字符串对象中准确读取128个字节?
我写了一些代码来读取文件的前128个字节并打印它然后打印文件的最后128个字节并打印出来.最后一部分可以工作,因为您可以轻松地迭代到EOF,但是如何从前面获得正好128个字节?下面的代码不起作用,因为你不能添加128到ifstream的迭代器,它不是可转位,仅可递增的(似乎).
当然我可以制作一个迭代器和*++它128次,但必须有一条直线的方法来做,对吧?
#include <iostream>
#include <fstream>
#include <string>
int main(int argc, char **argv)
{
std::ifstream ifs ("input.txt",std::ifstream::in | std::ifstream::binary);
if (ifs.good())
{
// read first 128 bytes into a string
ifs.seekg(0,std::ifstream::beg);
std::string first128((std::istreambuf_iterator<char>(ifs)),
(std::istreambuf_iterator<char>(ifs))+128);
std::cout << first128 << std::endl;
// read last 128 bytes into a string
ifs.seekg(-128,std::ifstream::end);
std::string last128((std::istreambuf_iterator<char>(ifs)),
std::istreambuf_iterator<char>());
std::cout << last128 << std::endl;
return 0;
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
char buffer[129];
ifs.read (buffer,128);
buffer[128] = '\0';
first128 = buffer;
Run Code Online (Sandbox Code Playgroud)
那么这个怎么样:
template <typename Itr, typename Out>
void copy_n(Itr it, size_t count, Out out)
{
for(size_t i=0;i<count;++i)
out = *it++;
}
...
std::string first128;
std::istreambuf_iterator<char> it(ifs);
copy_n( it, 128,
std::back_inserter<std::string>(first128) );
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13373 次 |
最近记录: |