2009年1月31日星期六

stream学习

通过stream实现文件复制
经典的方法是借助一个指定大小的Buffer,调用fopen,fread,fwrite,fclose。
通过STL的i/o stream可以简洁的实现文件复制:
ifstream ifs("infilename");
ofstream ofs("outfilename");
ofs << inf.rdbuf();
原来是有很多书还没有看过Effective STL就是其中之一。其中的Item17就是之前在DevX上看到通过swap来去除vector过剩容量的内容。而Item29就是这里的ifstreambuf_iterator>复制文本文件到字符串中。
ifstream instream("txt.txt");
string input(
istreambuf_iterator(instream.rdbuf()),
istreambuf_iterator()
);
又引出istreambuf_iterator的一个特殊之处:如果一个istreambuf_iterator对象到达stream的末尾或者由默认构造函数构造生成,则它的值为end-of-stream,类似于文件操作中的EOF。上面的string构造函数的第二个参数就是利用了这一点。
这里用到的是string的构造函数:template string (InputIterator begin, InputIterator end);

没有评论: