C++文件的读写存在一个问题:支持窄字节,不支持宽字节

文件类型分为:文本文件、二进制文件

C++ 通过以下几个类支持文件的输入输出:

ofstream: 写操作(输出)的文件类 

ifstream: 读操作(输入)的文件类

fstream: 可同时读写操作的文件类 

需要      #include <fstream>

 using namespace std;

视频教程:

​文件IO操作之打开与关闭​

 ​​文件IO操作之读写​


读写文本文件:

ofstream fs;//创建一个写文件流
fs.open("d:\\123.txt"); //打开文件 【个人:重新创建文件,原有内容被删除】
/*
参数2 打开方式
ios::in 读 ios::out 写
ios::binary 二进制方式 ios::ate 初始位置:文件尾
ios::app 所有输出附加在文件末尾 ios::trunc 如果文件已存在则先删除该文件
这些标识符可以被组合使用,中间以操作符(|)间隔
*/

//ofstream fs("d:\\123.txt");//创建并打开一个写文件流



fs << 20000 << endl; //把20000写入文件
fs.close(); //关闭文件

ifstream fs1; //创建一个读文件流
fs1.open("d:\\123.txt"); //打开文件
int var = 88;
fs1 >> var; //读取文件内容,放到var变量中
fs1.close();


判断文件打开是否成功:

方法一:

if (!fs)

{

str = _T("文件打开失败");


}

文件打开失败,fs=null

方法二:

if (!fs.is_open())

{

str = _T("文件打开失败");

}

文件打开失败,fs.is_open()返回null

方法三:

文件打开失败,fs.good()返回false

good() 该方法在没有发生任何错误的时候返回true。该方法也指出的最后一次读取操作是否成功


写文件:

fs << 20000 << endl; //把整数20000写入文件

fs << 18.9 << endl; //写浮点数

fs << "word" << endl;

fs << "中国" << endl; //写入窄字节中文;不能宽字节

fs.put('y');   //写入英文字符


读文件:

int var = 88;

fs1 >> var; //读取整数值,放到var变量中

float fl;

fs1 >> fl; //读取浮点数,放到fl变量中

char ch[100];

fs1 >> ch; //读取字符串,放到ch变量中

fs1 >> ch;

char ch1 = fs1.get(); //读取一个字符,包括\n \r

char ch[100];

fs1.getline(ch,100); //读取一行,放到ch变量中

//参数2     ch缓冲区大小

文件指针:

 bool bl = fs1.eof(); //判断文件指针是否到了文件末尾,在文件末尾返回True

 x = fs1.tellg();     //返回文件读指针位置;在文件末尾返回-1  

x = fs.tellp();     //返回文件写指针位置

fs1.seekg(-4, ios::cur);//移动文件读指针

参数1:移动偏移量(字节数),可以是正负数值,正的表示向后偏移,负的表示向前偏移

参数2:可以是

ios::beg    表示输入流的开始位置
ios::cur    表示输入流的当前位置
ios::end   表示输入流的结束位置

fs.seekp(-4, ios::cur);   //移动文件写指针

参数1:移动偏移量(字节数),可以是正负数值,正的表示向后偏移,负的表示向前偏移,

参数2:可以是

ios::beg 表示输入流的开始位置

ios::cur 表示输入流的当前位置

ios::end 表示输入流的结束位置

 fs.seekg(1);  //移动文件读指针到某一位置

fs.seekp(1);   //移动文件写指针到某一位置

文件大小:把文件指针移到末尾,返回指针位置就是文件大小(字节数)

读写二进制文件:

ofstream fs;//创建一个写文件流
fs.open("d:\\1234.txt"); //打开文件
int var = 20000;
fs.write((char*)&var,sizeof(var)); //把var变量的内容写入文件
//参数1 要写入的内容 char*类型的地址
//参数2 写入的字节数
fs.close(); //关闭文件

ifstream fs1; //创建一个读文件流
fs1.open("d:\\1234.txt"); //打开文件
var = 88;
fs1.read((char*)&var,sizeof(int)); //读取文件内容,放到var变量中
//参数1 读取数据保存的变量地址
//读取字节数
fs1.close();