目录
头文件
常用类模板
basic_ifstream文件输入类模板
模板原型
模板的成员类型和成员对象和成员函数
文件输入类模板的容器对象
实例
basic_ifstream文件输出类模板
模板原型
模板的成员类型和成员对象和成员函数
实例
basic_ifstream文件输出类模板
模板原型
模板的成员类型和成员对象和成员函数
实例
头文件
#include<fstream>
常用类模板
- basic_ifstream实现高层文件流输入操作
- basic_ofstream实现高层文件流输出操作
- basic_fstream实现高层文件流输入/输出操作
basic_ifstream文件输入类模板
类模板 basic_ifstream 实现文件流上的高层输入操作。它将 std::basic_istream 的高层接口赋予基于文件的流缓冲(std::basic_filebuf)。
模板原型
template<
class CharT,
class Traits = std::char_traits<CharT>
> class basic_ifstream : public std::basic_istream<CharT, Traits>
模板的成员类型和成员对象和成员函数
std::basic_ifstream - cppreference.comhttps://zh.cppreference.com/w/cpp/io/basic_ifstream
文件输入类模板的容器对象
//实例化一个文件输入类模板的对象 -----这个对象是读操作
std::basic_ifstream<char> ifstream;
//typedef std::basic_ifstream<char> std::ifstream;
std::ifstream file;
实例
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
//cout << "Hello World!" << endl;
//实例化一个文件输入类模板的对象 -----这个对象是读操作
//std::basic_ifstream<char> ifstream;这样写太麻烦
//c++起了别名 typedef std::basic_ifstream<char> std::ifstream;
std::ifstream file;
//打开文件
//in-->读操作 out 写操作
file.open("1.txt",std::ios_base::in|std::ios_base::out);
//也可以这么写
std::ifstream file1("1.txt",std::ios_base::in|std::ios_base::out);
//判断是否打开成功
if(file.is_open() == false)
{
cout<<"open error"<<endl;
return -1;
}
//从文本中 读取数据只能获取一个字符串,有空格空行会断开
string data;
file>>data;
//eof 判断是否到达末尾
while(!file.eof())
{
char text[1024] = {0};
//getline 获取 一行的数据
file.getline(text,sizeof(text));
cout<<"text:"<<text<<endl;
}
file.close();
file1.close();
return 0;
}
basic_ifstream文件输出类模板
类模板 basic_ofstream 实现文件上基于流的高层输出操作。它将 std::basic_ostream 的高层接口赋予基于文件的流缓冲(std::basic_filebuf)。
模板原型
template<
class CharT,
class Traits = std::char_traits<CharT>
> class basic_ofstream : public std::basic_ostream<CharT, Traits>
模板的成员类型和成员对象和成员函数
std::basic_ofstream - cppreference.comhttps://zh.cppreference.com/w/cpp/io/basic_ofstream
实例
#include <fstream>
#include <iostream>
#include <string>
int main()
{
//写入
std::string filename = "Test.b";
{
//创建对象
std::ofstream ostrm(filename, std::ios::binary);
double d = 3.14;
ostrm.write(reinterpret_cast<char*>(&d), sizeof d); // 二进制输出
ostrm << 123 << "abc" << '\n'; // 文本输出
}
//读取
std::ifstream istrm(filename, std::ios::binary);
double d;
istrm.read(reinterpret_cast<char*>(&d), sizeof d);
int n;
std::string s;
istrm >> n >> s;
std::cout << "回读:" << d << " " << n << " " << s << '\n';
}
运行成功输出
回读:3.14 123 abc
basic_ifstream文件输出类模板
类模板 basic_fstream 实现基于文件的流上的高层输入/输出。它将 std::basic_iostream 的高层接口赋予基于文件的缓冲(std::basic_filebuf)。
模板原型
template<
class CharT,
class Traits = std::char_traits<CharT>
> class basic_fstream : public std::basic_iostream<CharT, Traits>
模板的成员类型和成员对象和成员函数
std::basic_fstream - cppreference.comhttps://zh.cppreference.com/w/cpp/io/basic_fstream
实例
#include <fstream>
#include <iostream>
#include <string>
int main()
{
//定义字符串文件名
std::string filename{"test.bin"};
//以读写方式打开文件
std::fstream s{filename, s.binary | s.trunc | s.in | s.out};
//判断是否打开成功
if (!s.is_open())
std::cout << "打开 " << filename << " 失败\n";
else
{
// 写入
double d = 3.14;
s.write(reinterpret_cast<char*>(&d), sizeof d); // 二进制输出
s << 123 << "abc"; // 文本输出
// 对于 fstream,这会移动文件位置指针(放置与获取),移到最前面
s.seekp(0);
// 读取
d = 2.71828;
s.read(reinterpret_cast<char*>(&d), sizeof d); // 二进制输入
int n;
std::string str;
if (s >> n >> str) // 文本输入
std::cout << "从文件读回:" << d << ' ' << n << ' ' << str << '\n';
}
}
输出
从文件读回:3.14 123 abc