VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 158|回复: 0

[分享] c++文件操作练手记录

[复制链接]
13_avatar_middle
最佳答案
1 
在线会员 发表于 2022-1-10 22:44:31 | 显示全部楼层 |阅读模式
在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就是以只读和隐含属性打开文件

代码如下:
  1. void test01()
  2. {
  3.         //ofstream:写操作
  4.         ofstream ofs;
  5.         //ofs.open打开文件
  6.         ofs.open("test.txt", ios::out);////ios::out向文件内写入内容
  7.         ofs << "姓名:孙猴子" << endl;
  8.         ofs << "年龄:700" << endl;
  9.         ofs << "性别:天生石猴" << endl;
  10.         //关闭文件
  11.         ofs.close();
  12. }
  13. int main()
  14. {
  15.         test01();
  16.         system("pause");
  17.         return 0;
  18. }
复制代码

注:运行请按任意键继续 打开cpp目录下test.txt查看是否写入内容

读文件步骤如下:

包含头文件
#include <fstream>

创建流对象
ifstream ifs;

打开文件
ifs.open(“文件路径”,打开方式);

读数据
四种方式读取

关闭文件
ifs.close();

代码如下:
  1. void test01()
  2. {
  3.         //ifstream: 读操作
  4.         ifstream ifs;
  5.         ifs.open("test.txt", ios::in);
  6.         //if ( ! ifs.is_open)的意思是 if(ifs.is_open() = = false)
  7.         if (!ifs.is_open())  
  8.         {
  9.                 //如果文件名不对或目录下没有则打开失败
  10.                 cout << "文件打开失败!" << endl;
  11.                 return;
  12.         }
  13.         //读内容 第一种
  14.         char buf[1024] = { 0 };
  15.         while (ifs.getline(buf, sizeof(buf)))
  16.         {
  17.                 cout << buf << endl;
  18.         }
  19. }
  20. int main()
  21. {
  22.         test01();
  23.         system("pause");
  24.         return 0;
  25. }
复制代码


//读内容 第二种
  1. char buf[1024] = { 0 };
  2.         while (ifs>>buf)
  3.         {
  4.                 cout << buf << endl;
  5.         }
复制代码

//读内容 第三种
  1. string buf;
  2.         while (getline(ifs, buf))
  3.         {
  4.                 cout << buf << endl;
  5.         }
复制代码

//读内容 第四种(一个一个字符读取)不推荐使用
  1. char c;
  2.         while ((c = ifs.get()) != EOF)
  3.         {
  4.                 //不能加endl,会出现乱码和数字
  5.                 cout << c;
  6.      }
复制代码


二进制文件读和写(会出现乱码情况)文件看不懂没关系,只要能正常输出和写入就可以了

二进制方式写文件主要利用流对象调用成员函数 write
函数原型 :
ostream& write(const char * buffer,int len);
参数解释:
字符指针buffer指向内存中一段存储空间。
len是读写的字节数
代码如下:
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. using namespace std;
  5. //注意不要用c++风格的string会出现问题  用c风格的char
  6. class Person
  7. {
  8. public: //公有成员public 私有成员 private  被保护成员protected
  9.         char m_Name[64];//姓名
  10.         int m_Age;//年龄
  11. };

  12. void test01()
  13. {
  14.         //ofstream:写操作
  15.         ofstream ofs; //也可以这样方式ofstream ofs("test.txt", ios::out | ios::binary)
  16.         //ios::binary 以二进制方式打开文件,缺省的方式是文本方式
  17.         ofs.open("test.txt", ios::out | ios::binary);
  18.         //写文件
  19.         Person p = { "张三",18 };
  20.         ofs.write((const char*)&p,sizeof(Person));
  21.         //关闭文件
  22.         ofs.close();

  23. }
  24. int main()
  25. {
  26.         test01();
  27.         system("pause");
  28.         return 0;
  29. }
复制代码


二进制方式读文件主要利用流对象调用成员函数read
函数原型:
istream& read(char *buffer,int len);
参数解释:
字符指针buffer指向内存中一段存储空间
len是读写的字节数

二进制读文件代码如下:
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. using namespace std;
  5. //注意不要用c++风格的string会出现问题  用c风格的char
  6. class Person
  7. {
  8. public: //公有成员public 私有成员 private  被保护成员protected
  9.         char m_Name[64];//姓名
  10.         int m_Age;//年龄
  11. };

  12. void test01()
  13. {
  14.         //ifstream: 读操作
  15.         ifstream ifs;
  16.         //ios::in 为读文件而打开文件  ios::binary 二进制方式
  17.         ifs.open("test.txt", ios::in | ios::binary);
  18.         if (!ifs.is_open())
  19.         {
  20.                 cout << "文件打开失败!" << endl;
  21.                 return;
  22.         }
  23.         Person p;
  24.         ifs.read((char*)&p, sizeof(p));
  25.         cout << "姓名:" << p.m_Name << " 年龄:" << p.m_Age << endl;
  26.         //关闭文件
  27.         ifs.close();
  28. }
  29. int main()
  30. {
  31.         test01();
  32.         system("pause");
  33.         return 0;
  34. }
复制代码





上一篇:c++结构体实战练习(冒泡排序)
下一篇:莫问剑 -WINDOWS 应用、系统编程(开头篇)
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2022-1-21 09:16

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表