在计算机系统中,文件可分为文本文件和二进制文件两大类。
文本文件是以ASCII码方式存储的文件(汉字是以机内码的方式存储的);
二进制文件的内容可以看成是由0和1组成的字符串,计算机中的图片、视频、音频都是以二进制文件的形式来存储的。
I/O流
iostream定义了格式化和非格式化的I/O流相关类
fstream头文件定义了文件处理的方法,进行文件的输入输出时必须包含它
iomanip头文件定义了一些控制流格式且需要参数的计算符
文件打开模式
ios::in 输入方式打开文件
ios::out 输出方式打开文件
ios::app 追加方式
ios::ate 打开文件并将文件指针定位到文件末尾
ios::binary 二进制方式打开文件
ios::trunc 文件存在的情况下将之前的文件长度设为0
打开方式可组合使用
ios::in | ios::out 以读和写的方式打开文件
c++默认打开文件的方式是文本文件方式
若要用二进制文件方式打开的话
ofstream file;
file.open("text.txt",ios::binary);
向文件中写数据(文本文件)
使用“<<”方法,ofstream创建一个可写入数据的文件
//用"<<"向文件中输出数据
#include<fstream>
#include<iostream>
using namespace std;
int main()
{
ofstream ifile;
ifile.open("in1.txt");
if (ifile)
{
cout << "ok" << endl;
}
ifile << "从零开始学C++";
ifile.close();
system("pause");
}
使用put方法写入一个字符
//put使用方法介绍
#include<fstream>
#include<iostream>
using namespace std;
int main()
{
ofstream ifile;
ifile.open("in1.txt");
if (ifile)
{
cout << "ok" << endl;
}
/*ifile.put('B');*/ //向文件中输入单个字符
ifile << "A"; //以标准输出方式向文件中输出内容
ifile.close();
system("pause");
}
从文件中读数据(文本文件)
ifstream打开一个文件
- get()方法从文件中获取单个字符信息知道文件末尾
输出get中获得的字符即可读出文件中的数据
//get()方法使用
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
ifstream infile("in1.txt");
char mychar;
if (!infile.good())
{
cout << "打开文件失败" << endl;
cin.get();
return 0;
}
while (infile.get(mychar)) //按每个字符的顺序读取文件
{
cout << mychar;
}
cout << endl;
cin.get();
return 0;
}
- getline()方法是获取文件了一行信息内容,直到文件结束或人为地结束文件读取功能为止。
//getline()方法使用
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
ifstream infile("in1.txt",ios::out);
const int size = 256;
char buf[size]; //字符缓冲区用来保存每行的文件内容
if (infile.fail())
{
cout << "打开文件失败" << endl;
cin.get();
return 0;
}
while (infile.getline(buf,size)) //按行读取文件
{
cout << buf << endl;
}
cout << endl;
cin.get();
return 0;
}
- rdbuf()方法能更便捷的输出文本中的内容
不用循环语句
//getline()方法使用
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
ifstream infile("in1.txt", ios::out);
if (infile.fail())
{
cout << "打开文件失败" << endl;
cin.get();
return 0;
}
cout << infile.rdbuf();
cout << endl;
cin.get();
return 0;
}
二进制文件的读和写
- 二进制文件写入方法
ostream &write(const char *buffer, streamsize num);
write方法的功能是将缓冲区buffer中的字符串信息输入到输出流中去。
num是输出到输出流中字符的长度。
//二进制文件write方法的使用
#include<fstream>
#include<iostream>
#include<string>
using namespace std;
void main()
{
ofstream ifile;
char *strbuff = "从零开始学C++"; //定义一个字符串信息
ifile.open("in.txt", ios::binary);
if (ifile)
{
cout << "ok" << endl;
}
ifile.write(strbuff, strlen(strbuff));
ifile.close();
system("pause");
}
- 二进制文件读取方法
istream &read(char *buffer,streamsize num);
函数read()用于输入流,在将字符放入buffer之前从流中读取num个字节。碰到EOF,就停止读取字符信息,丢弃已经读取的字符信息。
//read()函数用法
#include<iostream>
#include<fstream>
using namespace std;
#define size 100
int main()
{
ifstream infile("in1.txt", ios::binary);
char buff[size];
if (infile.fail())
{
cout << "打开文件失败" << endl;
return 0;
}
while (!infile.eof())
{
infile.read(buff, size);
cout << buff;
}
cout << endl;
cin.get();
return 0;
}