前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ 文件、流《Rice C++ 学习开发》

C++ 文件、流《Rice C++ 学习开发》

作者头像
Rice加饭
发布2022-05-09 21:31:49
5710
发布2022-05-09 21:31:49
举报
文章被收录于专栏:Rice嵌入式

前面利用了三篇文章讲解了面向过程过程到面向对象语言的转变,以及对C++面向对象的内容进行了讲解,接下来将对C++的高级编程内容进行讲解。

流:在之前文章的代码中也有用,cin 和 cout 方法,分别是标准输入流和标准输出流。简单理解流:水管的的的水流的进和出。

那么文件跟流有什么关系呢??在C++中,文件的读写也是通过类似标准输入、输出流一样。

C++的文件操作:

在标准输入和输出方法中,我们是使用了iostream标准库,而对于文件读取流和文件写入流,我们将使用标准库fstream,C++定义了三个新的数据类型。

数据类型

描述

ofstream

该数据类型表示输出文件流,用于创建文件并向文件写入信息。

ifstream

该数据类型表示输入文件流,用于从文件读取信息。

fstream

该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息

其中在进行文件处理时,必须在包含头文件#include<iostream> 和 #include <fstream>

打开文件:

对文件的操作我们必须需先打开文件,通过成员函数open(),该成员函数是fstream、ifstream、ofstream对象的成员函数。打开文件,其原型:

代码语言:javascript
复制
void open(const char *filename,ios::openmode mode)

filename:打开文件的名称和路径

mode:文件打开的模式标志

模式标志

描述

ios::app

追加模式。所有写入都追加到文件末尾。

ios::ate

文件打开后定位到文件末尾。

ios::in

打开文件用于读取。

ios::out

打开文件用于写入。

ios::trunc

如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。

关闭文件:

C++中,当我们终止程序时,它会自动关闭所有流,释放所有分配的内存,以及关闭所有打开的文件。不过要养成良好的编程习惯,在终止程序时,关闭所有打开的文件。通过成员函数close(),该成员函数是fstream、ifstream、ofstream对象的成员函数。函数原型:

代码语言:javascript
复制
 void close();

文件写入:

C++的文件写入使用流插入运算符“<<”向文件写入信息。

文件读取:

C++的文件读取使用流提取运算符“>>”向文件读取信息。

文件打开、关闭、读写操作例子:

代码语言:javascript
复制
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    string write_str = "Rice_stduio";
    string read_str;

    ofstream write_file;
    write_file.open("writefile.txt");
    write_file << write_str << endl;
    write_file.close();

    ifstream read_file;
    read_file.open("readfile.txt");
    read_file >> read_str;

    cout << read_str << endl;
    read_file.close();

    return 0;
}

文件位置指针:

istream 和 ostream 都提供了用于重新定位文件位置指针的成员函数。这些成员函数包括关于 istream 的 seekg("seekget")和关于 ostream 的 seekp("seekput")。

seekg 和 seekp 的参数通常是一个长整型。第二个参数可以用于指定查找方向。查找方向可以是 ios::beg(默认的,从流的开头开始定位),也可以是 ios::cur(从流的当前位置开始定位),也可以是 ios::end(从流的末尾开始定位)。

代码语言:javascript
复制
// 定位到 fileObject 的第 n 个字节(假设是 ios::beg)
fileObject.seekg( n );
 
// 把文件的读指针从 fileObject 当前位置向后移 n 个字节
fileObject.seekg( n, ios::cur );
 
// 把文件的读指针从 fileObject 末尾往回移 n 个字节
fileObject.seekg( n, ios::end );
 
// 定位到 fileObject 的末尾
fileObject.seekg( 0, ios::end );

例子:

代码语言:javascript
复制
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    string read_str1;
    string read_str2;

    ifstream read_file;
    read_file.open("readfile.txt");
    read_file >> read_str1;
    cout << read_str1 << endl;
    read_file.close();

    read_file.open("readfile.txt");
    read_file.seekg(2, ios::cur);
    read_file >> read_str2;
    cout << read_str2 << endl;

    read_file.close();

    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rice 嵌入式开发技术分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档