前面利用了三篇文章讲解了面向过程过程到面向对象语言的转变,以及对C++面向对象的内容进行了讲解,接下来将对C++的高级编程内容进行讲解。
流:在之前文章的代码中也有用,cin 和 cout 方法,分别是标准输入流和标准输出流。简单理解流:水管的的的水流的进和出。
那么文件跟流有什么关系呢??在C++中,文件的读写也是通过类似标准输入、输出流一样。
C++的文件操作:
在标准输入和输出方法中,我们是使用了iostream标准库,而对于文件读取流和文件写入流,我们将使用标准库fstream,C++定义了三个新的数据类型。
数据类型 | 描述 |
---|---|
ofstream | 该数据类型表示输出文件流,用于创建文件并向文件写入信息。 |
ifstream | 该数据类型表示输入文件流,用于从文件读取信息。 |
fstream | 该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息 |
其中在进行文件处理时,必须在包含头文件#include<iostream> 和 #include <fstream>
打开文件:
对文件的操作我们必须需先打开文件,通过成员函数open(),该成员函数是fstream、ifstream、ofstream对象的成员函数。打开文件,其原型:
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对象的成员函数。函数原型:
void close();
文件写入:
C++的文件写入使用流插入运算符“<<”向文件写入信息。
文件读取:
C++的文件读取使用流提取运算符“>>”向文件读取信息。
文件打开、关闭、读写操作例子:
#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(从流的末尾开始定位)。
// 定位到 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 );
例子:
#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;
}
本文分享自 Rice 嵌入式开发技术分享 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!