C++ seekp()成员方法
发布时间:2023-06-14 13:22:21 所属栏目:语言 来源:
导读:seekp() 方法用于指定下一个进入输出缓冲区的字符所在的位置。
借助 tellp() 方法得知,最后一个 '/' 字符所在的位置是 29。此时如果继续向缓冲区中存入数据,则下一个字符所在的位置应该是 30,但借助 s
借助 tellp() 方法得知,最后一个 '/' 字符所在的位置是 29。此时如果继续向缓冲区中存入数据,则下一个字符所在的位置应该是 30,但借助 s
seekp() 方法用于指定下一个进入输出缓冲区的字符所在的位置。 借助 tellp() 方法得知,最后一个 '/' 字符所在的位置是 29。此时如果继续向缓冲区中存入数据,则下一个字符所在的位置应该是 30,但借助 seekp() 方法,我们可以手动指定下一个字符存放的位置。 比如通过 seekp() 指定下一个字符所在的位置为 23,即对应 "cplus/" 部分中字符 'c' 所在的位置。 显然,新的 "python/" 覆盖了原来的 "cplus/"。 seekp() 方法有如下 2 种语法格式: //指定下一个字符存储的位置 ostream& seekp (streampos pos); //通过偏移量间接指定下一个字符的存储位置 ostream& seekp (streamoff off, ios_base::seekdir way); 其中,各个参数的含义如下: pos:用于接收一个正整数; off:用于指定相对于 way 位置的偏移量,其本质也是接收一个整数,可以是正数(代表正偏移)或者负数(代表负偏移); 模式标志 描 述 ios::beg 从文件头开始计算偏移量 ios::end 从文件末尾开始计算偏移量 ios::cur 从当前位置开始计算偏移量 同时,seekp() 方法会返回一个引用形式的 ostream 类对象,这意味着 seekp() 方法可以这样使用: cout.seekp(23) << "当前位置为:" << cout.tellp(); 举个例子: #include <iostream> //cin 和 cout #include <fstream> //文件输入输出流 using namespace std; int main() { //定义一个文件输出流对象 ofstream outfile; //打开 test.txt,等待接收数据 outfile.open("test.txt"); const char * str = "http://c.biancheng.net/cplus/"; //将 str 字符串中的字符逐个输出到 test.txt 文件中,每个字符都会暂时存在输出流缓冲区中 for (int i = 0; i < strlen(str); i++) { outfile.put(str[i]); //获取当前输出流 } cout << "当前位置为:" << outfile.tellp() << endl; //调整新进入缓冲区字符的存储位置 outfile.seekp(23); //等价于: //outfile.seekp(23, ios::beg); //outfile.seekp(-6, ios::cur); //outfile.seekp(-6, ios::end); cout << "新插入位置为:" << outfile.tellp() << endl; const char* newstr = "python/"; outfile.write("python/", 7); //关闭文件之前,刷新 outfile 输出流缓冲区,使所有字符由缓冲区流入test.txt文件 outfile.close(); return 0; } (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |