9.文件流
1,C++提供了文件流,fstream来处理文件;
数据类型 | 描述 |
---|---|
ofstream | 该数据类型表示输出文件流,用于创建文件并向文件写入信息; |
ifstream | 该数据类型表示输入文件流,用于从文件读取信息; |
fstream | 该数据类型通常表示文件流,且同时具有ofstream和ifstream两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息; |
2,在从文件读取信息或者向文件写入信息之前,必须先打开文件;
`ofstream用来打开文件进行写操作;
`ifstream用来打开文件进行读操作;
`fstream支持文件的读和写操作;
3,打开文件
`通过构造函数打开;
`通过成员函数open,来打开
定义:
void open(const*filename,ios::openmode mode);
`filename 文件名
`mode 操作模式
方式 | 作用 |
---|---|
ios::in | 以读的方式打开文件 |
ios::out | 以写的方式打开文件,如果已有此名字的文件,则将原有的内容全部清除 |
ios::app | 以写的方式打开文件,写入的数据添加在文件末尾 |
ios::ate | 打开一个已有的文件,文件指针指向文件末尾 |
ios::trunc | 打开一个文件,如果文件已存在,则删除其中全部数据,如果文件不存在,则建立新文件,如已经指定ios::out方式,而未指定ios::app,ios::ate,ios::in,则同时默认此方式; |
ios::binary | 以二进制方式打开文件,默认为ASCII方式打开 |
ios::noreplace | 如果文件不存在则创建新文件,如果文件已存在则操作失败 |
ios::in|ios::out | 以读和写的方式打开文件 |
ios::out|ios::binary | 以二进制写的方式打开文件 |
ios::in|ios::binary | 以二进制读的方式打开文件 |
ios::nocreate | 打开一个已有的文件,如果文件不存在,则打开失败,不创建新文件 |
注意:从文件输入到内存-----读;
从内存输出到文件-----写;
4,判断是否打开成功
`成员函数:is_open()
`运算符重载:!filename
5,读写文件
`两种主要方式读写文件:
1,流运算符>> <<
2,成员函数 write read;
//文本文件读写
void READ()
{
//读的方式打开文件
ifstream f("./mm.txt");
if (!f.is_open())
{
cerr << "open error" << endl;
}
char str[123]="";
//while (!f.eof())//这种方式会忽略空格和换行符
//{
// f >> str;
// cout << str;
//}
//while (!f.eof())
//{
// //f.getline(str, 123);不忽略空格但还是会忽略换行符
// f.get(str, 123);
// char ch;
// f >> ch;
// cout << ch;
// cout << str;
//}
/*while (!f.eof())
{
char ch=f.get();
cout << ch;
}*/
f.read(str, 123);
cout << str << endl;
f.close();
}
void Write()
{
ofstream f("./hh.txt");
if (!f.is_open()||!f)
{
cerr << "error" << endl;
}
f << "王德发卧槽牛";
f.write("\nfdfsdf", 8);
f.close();
}
//二进制读写
void BinReadWrite()
{
//图片拷贝
fstream src("./22.png",ios::in|ios::binary);
fstream dest("kk.png", ios::out|ios::binary);
if (!src)
{
cerr << "error" << endl;
}
if (!dest)
{
cerr << "dest error" << endl;
}
//while (!src.eof())第一种方法
//{
// char ch = src.get();
// dest.put(ch);
//}
char hh[999] = "";
while (!src.eof())//第二种方法
{
src.read(hh, 999);
dest.write(hh, 999);
}
src.close();
dest.close();
}