|
在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream
操作文件的三大类:(不要写反ofstream和ifstream)
ofstream:写操作
ifstream: 读操作
fstream : 读写操作
写文件步骤如下:
包含头文件
#include <fstream>
创建流对象
ofstream ofs;
打开文件
ofs.open(“文件路径”,打开方式);
写数据
ofs << “写入的数据”;
关闭文件
ofs.close();
文件打开方式:
ios::in 为读文件而打开文件
ios::out 为写文件而打开文件
ios::ate 初始位置:文件尾
ios::app 追加方式写文件
ios::trunc 如果文件存在先删除,再创建
ios::binary 二进制方式
注意: 文件打开方式可以配合使用,利用|操作符
如:用二进制方式写文件
ios::binary | ios:: out
0:普通文件,打开访问
1:只读文件
2:隐含文件
4:系统文件
可以用“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开文件
代码如下:
- void test01()
- {
- //ofstream:写操作
- ofstream ofs;
- //ofs.open打开文件
- ofs.open("test.txt", ios::out);////ios::out向文件内写入内容
- ofs << "姓名:孙猴子" << endl;
- ofs << "年龄:700" << endl;
- ofs << "性别:天生石猴" << endl;
- //关闭文件
- ofs.close();
- }
- int main()
- {
- test01();
- system("pause");
- return 0;
- }
复制代码
注:运行请按任意键继续 打开cpp目录下test.txt查看是否写入内容
读文件步骤如下:
包含头文件
#include <fstream>
创建流对象
ifstream ifs;
打开文件
ifs.open(“文件路径”,打开方式);
读数据
四种方式读取
关闭文件
ifs.close();
代码如下:
- void test01()
- {
- //ifstream: 读操作
- ifstream ifs;
- ifs.open("test.txt", ios::in);
- //if ( ! ifs.is_open)的意思是 if(ifs.is_open() = = false)
- if (!ifs.is_open())
- {
- //如果文件名不对或目录下没有则打开失败
- cout << "文件打开失败!" << endl;
- return;
- }
- //读内容 第一种
- char buf[1024] = { 0 };
- while (ifs.getline(buf, sizeof(buf)))
- {
- cout << buf << endl;
- }
- }
- int main()
- {
- test01();
- system("pause");
- return 0;
- }
复制代码
//读内容 第二种
- char buf[1024] = { 0 };
- while (ifs>>buf)
- {
- cout << buf << endl;
- }
复制代码
//读内容 第三种
- string buf;
- while (getline(ifs, buf))
- {
- cout << buf << endl;
- }
复制代码
//读内容 第四种(一个一个字符读取)不推荐使用
- char c;
- while ((c = ifs.get()) != EOF)
- {
- //不能加endl,会出现乱码和数字
- cout << c;
- }
复制代码
二进制文件读和写(会出现乱码情况)文件看不懂没关系,只要能正常输出和写入就可以了
二进制方式写文件主要利用流对象调用成员函数 write
函数原型 :
ostream& write(const char * buffer,int len);
参数解释:
字符指针buffer指向内存中一段存储空间。
len是读写的字节数
代码如下:
- #include <iostream>
- #include <string>
- #include <fstream>
- using namespace std;
- //注意不要用c++风格的string会出现问题 用c风格的char
- class Person
- {
- public: //公有成员public 私有成员 private 被保护成员protected
- char m_Name[64];//姓名
- int m_Age;//年龄
- };
- void test01()
- {
- //ofstream:写操作
- ofstream ofs; //也可以这样方式ofstream ofs("test.txt", ios::out | ios::binary)
- //ios::binary 以二进制方式打开文件,缺省的方式是文本方式
- ofs.open("test.txt", ios::out | ios::binary);
- //写文件
- Person p = { "张三",18 };
- ofs.write((const char*)&p,sizeof(Person));
- //关闭文件
- ofs.close();
- }
- int main()
- {
- test01();
- system("pause");
- return 0;
- }
复制代码
二进制方式读文件主要利用流对象调用成员函数read
函数原型:
istream& read(char *buffer,int len);
参数解释:
字符指针buffer指向内存中一段存储空间
len是读写的字节数
二进制读文件代码如下:
- #include <iostream>
- #include <string>
- #include <fstream>
- using namespace std;
- //注意不要用c++风格的string会出现问题 用c风格的char
- class Person
- {
- public: //公有成员public 私有成员 private 被保护成员protected
- char m_Name[64];//姓名
- int m_Age;//年龄
- };
- void test01()
- {
- //ifstream: 读操作
- ifstream ifs;
- //ios::in 为读文件而打开文件 ios::binary 二进制方式
- ifs.open("test.txt", ios::in | ios::binary);
- if (!ifs.is_open())
- {
- cout << "文件打开失败!" << endl;
- return;
- }
- Person p;
- ifs.read((char*)&p, sizeof(p));
- cout << "姓名:" << p.m_Name << " 年龄:" << p.m_Age << endl;
- //关闭文件
- ifs.close();
- }
- int main()
- {
- test01();
- system("pause");
- return 0;
- }
复制代码
|
上一篇: c++结构体实战练习(冒泡排序)下一篇: 莫问剑 -WINDOWS 应用、系统编程(开头篇)
|