#include <fstream>
ofstream //文件写操作,内存写入到存储设备
ifstream //文件读操作,存储设备读取到内存中
fstream //读写操作,对打开的文件进行读写操作
1、打开文件
//参数1:操作的文件名
//参数2:打开文件的方式
//参数3:打开文件的属性
//打开文件有如下几种方式:
ios::in 为输入(读)而打开文件
ios::out 为输出(写)而打开文件
ios::ate 初始位置:文件尾
ios::app 所有输出附加在文件末尾
ios::trunc 如果文件已存在则先删除文件
ios::binary 二进制方式
这些方式都可以组合使用,之间使用(“|”)进行组合,
如:ofstream out;
out.open("aaa.txt", ios::out|ios::binary);
//打开文件的属性
0 普通文件,打开操作
1 只读文件
2 隐含文件
void open(const wchar_t *_Filename, ios_base::openmode mode= ios_base::in | ios_base::out, int prot = ios_base::_Openprot);
例:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ofstream file;
file.open("aaa.txt", ios::out|ios::binary);
file.close();
}
其中可使用缺省的方式:
ofstream out("aaa.txt", ios::out); //ios::out可缺省
ifstream in("aaa.txt", ios::in); //ios::in可缺省
fsteam fp("aaa.txt", ios::in| ios::out); //ios::in|ios::out可缺省
使用缺省方式时,可以用函数is_open(),判断文件是否打开
ofstream file("bbb.txt");
if(file.is_open()) //打开成功返回1,否则返回0
{
cout<<"hello!"<<endl;
file.close();
}
2、关闭文件
close();
3、文件写入
(1)使用操作符“<<”写入文件
#include <iostream>
#include <fstream>
int main()
{
std::ofstream file("aaa.txt", std::ios::out);
if(file.is_open())
{
file<<"hello world\n";
file.close();
}
return 0;
}
此种方式主要是文本文件的写入。
(2)write()写入文件
//buffer 表示要写入的内容,size表示写入内容的大小
write ( char * buffer, streamsize size ); //用于写入文本文件及二进制文件
例:
#include <iostream>
#include <string>
#include <fstream>
int main()
{
std::string buffer = "hello world!";
std::ofstream file("aaa.txt", std::ios::binary|std::ios::out);
if(file.is_open())
{
file.write(buffer.c_str(), buffer.size());
file.close();
}
return 0;
}
4、文件读取
(1)ifstream类的getline()函数
参数1:存放读取的字符串
参数2:读取的字符串长度
参数3:读取的结束符,默认为换行符
//length长度不足时,返回false,读取正常结束,返回true
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
例:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
char str[1024] = {0};
ifstream file("aaa.txt", ios::in);
if(file.is_open())
{
while(file.getline(str, 1024))
{
cout<<str<<endl;
}
file.close();
}
return 0;
}
(2)string类的getline函数
参数1:ifstream类,文件描述符
参数2:string类,存放读取的数据
参数3:读取截至符,默认为换行'\n'
istream& getline (istream& is, string& str, char delim); istream& getline (istream& is, string& str);
例:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
string str;
ifstream file("aaa.txt", ios::in);
if(file.is_open())
{
while(getline(file, str))
{
cout<<str<<endl;
}
file.close();
}
return 0;
}
(3)read()读取文本文件与二进制文件
参数1:存放读取的内容
参数2:读取内容的大小
istream & read ( char * buffer, int size );
例:
#include <iostream>
#include <string>
#include <fstream>
#include <string.h>
using namespace std;
int main()
{
//string buffer;
char buffer[10240] = {0};
ifstream file("aaa", ios::in);
if(file.is_open())
{
file.read(buffer, 10240);
file.close();
}
if(strlen(buffer) > 0)
{
ofstream out("bbb", ios::out);
if(out.is_open())
{
out.write(buffer, 10240);
out.close();
}
}
return 0;
}