程序运行时产生的数据者属于临时数据,程序一旦运行结束临时数据都会被释放。通过文件可以将数据持久化。

C++ 文件操作

C++中对文件操作需要包含头文件<fstream>

文件类型分为两种:

  1. 文本文件:文件以文本的ASCII码形式存储在计算机中
  2. 二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂文件内容

操作文件的三大类:

  1. ofstream 写操作
  2. ifstream 读操作
  3. fstream 读定操作

1、文本文件

(1)写文件

写文件步骤:

  1. 头文件包含  #include <fstream>
  2. 创建流对象 ofstream ofs;
  3. 打开文件    ofs.open("文件路径", 打开方式);
  4. 写数据       ofs << "写入的数据";
  5. 关闭文件   ofs.close();

文件打开方式:

  • ios::in            为读文件而打开文件
  • ios::out          为写文件而打开文件
  • ios::ate          初始位置:文件尾
  • ios::app         追加方式写文件
  • ios::trunc      如果文件存在先删除再创建
  • ios::binary    二进制方式

文件打开方式可以配合使用,利用 | 操作符,如:用二进制方式写文件 ios::binary | ios::out

#include <iostream>
#include <fstream>
using namespace std;int main()
{//文件操作 - 文本文件 - 写文件/*步骤:1、头文件包含  #include <fstream>2、创建流对象  ofstream ofs;3、打开文件    ofs.open("文件路径", 打开方式);4、写数据      ofs << "写入的数据";5、关闭文件    ofs.close();*///2、创建流对象ofstream ofs;//3、打开文件ofs.open("26-文件-1-文本文件.txt", ios::trunc);//4、写数据  ofs << "姓名:Tracy" << endl;ofs << "年龄:20" << endl;ofs << "电话:13800000000" << endl;//5、关闭文件ofs.close();system("pause");return 0;
}

输出结果:在工程目录下已生成文件"26-文件-1-文本文件.txt" ,打开文件,查看内容如下:

姓名:Tracy
年龄:20
电话:13800000000

(2)读文件(四种读取方式)

读文件与写文件步骤相似,但读取方式相对比较多。

读文件步骤:

  1. 头文件包含  #include <fstream>
  2. 创建流对象 ifstream ifs;
  3. 打开文件判断文件是否打开成功    ifs.open("文件路径", 打开方式);
  4. 读数据       四种读取方式
  5. 关闭文件   ifs.close();

以下代码包含四种读取方式,默认打开第一种读取方式,如想使用其它三种,将某种代码注释去掉,注释掉其它三种即可。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;int main()
{//文件操作 - 文本文件 - 读文件/*步骤:1、头文件包含  #include <fstream>2、创建流对象  ifstream ifs;3、打开文件判断文件是否打开成功    ifs.open("文件路径", 打开方式);4、读数据      四种读取方式5、关闭文件    ifs.close();*///2、创建流对象ifstream ifs;//3、打开文件判断文件是否打开成功ifs.open("26-文件-1-文本文件.txt", ios::in);if (!ifs.is_open()){cout << "文件打开失败";return 0;}//4、读数据 - 四种读取方式//4.1、第一种读取方式cout << endl << "第一种读取方式" << endl;char buf[1024] = { 0 };while (ifs >> buf){cout << buf << endl;}4.2、第二种读取方式//cout << endl << "第二种读取方式" << endl;//char buf2[1024] = { 0 };//while (ifs.getline(buf2, sizeof(buf2)))//{//   cout << buf2 << endl;//}4.3、第三种读取方式//cout << endl << "第三种读取方式" << endl;//string buf3;//while (getline(ifs, buf3))//{//  cout << buf3 << endl;//}4.4、第四种读取方式//cout << endl << "第四种读取方式" << endl;//char c;//while ((c = ifs.get()) != EOF)//{// cout << c;//}//5、关闭文件ifs.close();system("pause");return 0;
}

输出结果

第一种读取方式
姓名:Tracy
年龄:20
电话:13800000000

2、二进制文件

(1)写文件

二进制方式定文件主要利用流对象调用成员函数write

成员函数原型: ostream& write(const char * buffer, int len);

参数解释: 字符指针buffer指向内存中一段存储空间,len是读写的字节数。

#include <iostream>
#include <fstream>
using namespace std;class Person
{
public:char name[64]; //二进制文件最好不用string类型,避免出现一些问题int age;
};int main()
{//文件操作 - 二进制文件 - 写文件/*步骤:1、头文件包含  #include <fstream>2、创建流对象  ofstream ofs;3、打开文件    ofs.open("文件路径", 打开方式);4、写数据      ofs.write(const char * buffer, int len);5、关闭文件    ofs.close();*///2、创建流对象 , 创建后可直接打开文件,取代下面第3步ofstream ofs("26-文件-2-二进制文件.txt", ios::out | ios::binary);//3、打开文件//ofs.open("26-文件-2-二进制文件.txt", ios::out | ios::binary);//4、写数据  Person p = {"王小小", 21};ofs.write((const char *)&p, sizeof(p));//5、关闭文件ofs.close();system("pause");return 0;
}

输出结果:在工程目录下已生成文件"26-文件-2-二进制文件.txt" ,打开文件,查看内容如下,有乱码:

王小小

(2)读文件

二进制方式读文件主要利用流对象调用成员函数read

成员函数原型: istream& read(char *buffer, int len);

参数说明: 字符指针buffer批向内存中一段存储空间,len是读写的字节数

#include <iostream>
#include <fstream>
#include <string>
using namespace std;class Person
{
public:char name[64]; //二进制文件最好不用string类型,避免出现一些问题int age;
};int main()
{//文件操作 - 文本文件 - 读文件/*步骤:1、头文件包含  #include <fstream>2、创建流对象  ifstream ifs;3、打开文件判断文件是否打开成功    ifs.open("文件路径", 打开方式);4、读数据      istream& read(char *buffer, int len);5、关闭文件    ifs.close();*///2、创建流对象ifstream ifs;//3、打开文件判断文件是否打开成功ifs.open("26-文件-2-二进制文件.txt", ios::in);if (!ifs.is_open()){cout << "文件打开失败";return 0;}//4、读数据Person p;ifs.read((char *)&p, sizeof(p));cout << "姓名:" << p.name << ", 年龄:" << p.age << endl;//5、关闭文件ifs.close();system("pause");return 0;
}

输出结果

姓名:王小小, 年龄:21

Go语言文件操作

文件打开方式

  • os.O_CREATE      文件不存在则创建
  • os.O_RDONLY      只读
  • os.O_WRONLY     只写
  • os.O_RDWR         可读可写
  • os.O_TRUNC       文件长度截为0,即清空文件
  • os.O_APPEND     在文件中追加新数据

1、文本文件

(1)写文件

package mainimport ("fmt""os"
)func main() {//打开文件file, err := os.OpenFile("文本文件.txt", os.O_RDWR|os.O_CREATE, 755)if err != nil {fmt.Println("打开文件错误:", err)return}//关闭文件defer file.Close()//写入数据len, err := file.WriteString("姓名:Tracy")if err != nil {fmt.Println("写入文件错误: ", err)} else {fmt.Println("写入字符长度:", len)}
}

输出结果:在工程目录下已生成文件"文本文件.txt" ,打开文件,查看内容如下:

姓名:Tracy

(2)读文件(三种读取方式)

读取文件方式一

package mainimport ("fmt""io""os"
)func main() {//打开文件file, err := os.Open("文本文件.txt")if err != nil {fmt.Println("打开文件出错: ", err)return}//关闭文件defer file.Close()//读取文件for {buf := make([]byte, 64)_, err := file.Read(buf)if err == io.EOF {break}fmt.Printf(string(buf))}
}

输出结果

姓名:Tracy

读取文件方式二

package mainimport ("fmt""io/ioutil""os"
)func main() {//打开文件file, err := os.Open("文本文件.txt")if err != nil {fmt.Println("打开文件出错: ", err)return}//关闭文件defer file.Close()//读文件content, err := ioutil.ReadAll(file)if err != nil {fmt.Println("读取文件出错: ", err)return}fmt.Println(string(content))
}

输出结果

姓名:Tracy

读取文件方式三

package mainimport ("fmt""io/ioutil"
)func main() {//直接读文件content, err := ioutil.ReadFile("文本文件.txt")if err != nil {fmt.Println("读取文件出错: ", err)return}fmt.Println(string(content))
}

输出结果

姓名:Tracy

2、二进制文件

(1)写文件

package mainimport ("encoding/gob""fmt""os"
)type Person struct {Name stringAge int
}func main() {//打开文件,没有则创建file, err := os.OpenFile("二进制文件.txt", os.O_CREATE | os.O_RDWR, 775)if err != nil {fmt.Println("打开文件出错: ", err)return}//关闭文件defer file.Close()//写入数据person := Person{ "王小小",  21}encoder := gob.NewEncoder(file)err = encoder.Encode(person)if err != nil {fmt.Println("写入文件报错: ", err)return}
}

输出结果:在工程目录下已生成文件"二进制文件.txt" ,打开文件,查看内容如下,有乱码:

%?Person? Name  Age   ?    鐜嬪皬灏?*

注意:结构体中属性名首字母要大写,首字母小写则不写入文件

(2)读文件

package mainimport ("encoding/gob""fmt""os"
)type Person struct {Name stringAge int
}func main() {//打开文件,没有则创建file, err := os.OpenFile("二进制文件.txt", os.O_CREATE | os.O_RDONLY, 775)if err != nil {fmt.Println("打开文件出错: ", err)return}//关闭文件defer file.Close()//写入数据person := Person{ "王小小",  21}decoder := gob.NewDecoder(file)err = decoder.Decode(&person)if err != nil {fmt.Println("写入文件报错: ", err)return}fmt.Println(person)
}

输出结果

{王小小 21}

C++ 学习(15)文件操作、文件文件读与写操作、二进制文件读与写操作相关推荐

  1. Python学习系列(五)(文件操作及其字典)

    Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件      在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出 ...

  2. Java学习笔记(二)——Java操作properties文件

    [前面的话] 前段时间在学习和玩java web相关的东西,对于这些技术,一边学习,一边做东西,一边总结,希望可以一边成长和有所收获.有时总是思考太多反而成为了前进的阻力,所以对于生活还是简单一些,不 ...

  3. 【学习笔记】24、文件的其他操作

    文件的其他操作 一.文件的重命名和删除 1.文件重命名 os模快中的rename()方法可以完成对文件的重命名操作. rename(需要修改的文件名,新的文件名) 2.文件删除 os模快中的remov ...

  4. C/C++学习之路_九:文件操作

    C/C++学习之路_九:文件操作 目录 概述 文件的顺序读写 文件的随机读写 windows和linux文本 获取文件状态 删除文件.重命名文件 文件缓冲区 1. 概述 1. 磁盘文件和设备文件 磁盘 ...

  5. Linux学习笔记014---文件及文件夹权限设置_以及文件、文件夹的删除_移动_复制操作

    JAVA技术交流QQ群:170933152 加入-R 参数,就可以将读写权限传递给子文件夹 例如chmod -R 777 /home/mypackage 那么mypackage 文件夹和它下面的所有子 ...

  6. python目录和文件的基本操作_python学习笔记(七)——文件和目录操作

    目录和文件操作 语言只有和外部连起来操作才会实现更强大的功能,比如操作文件.数据库等,这样数据可以有一块单独存储的地方,而不是存放在内存中.更强大的是网络编程,当然这些后续都会学习.接下来学习pyth ...

  7. CH376的串口模式操作U盘(读、写、txt文件、csv文件、串口调试讲解、stm32程序)

    文中介绍的可能有一些繁琐,因为也是想解释的更清楚一些,但是小弟希望大家能认真看完. 市面上关于ch376串口的知识介绍不多,可以说基本没有,博主当时也废了一些力气,在此希望给大家一些帮助,认真看完绝对 ...

  8. Qt操作XML文件(创建,读,写,修改,添加,删除)

    XML文件在项目开发的过程中经常用的,比如配置文件基本上都是XML格式的,本文介绍在Qt环境下操作XML文件,具体用法看代码 原txt文件内容,在 http://www1.jctrans.com/to ...

  9. Python的学习(十六):对文件的操作

    Python的学习(十六):对文件的操作 编码格式的介绍 Python中的解释器使用的是Unicode(内存) .py文件在磁盘上使用UTF-8存储(外存) 如何修改文件格式?不写的话默认为UTF-8 ...

最新文章

  1. linux 远程禁用root
  2. 给oracle用户赋权限导入导出,Oracle常用命令-用户、表空间、赋权限、导入导出...
  3. 基于Arduino开发的简易“高水位报警系统解决方案”
  4. 深入理解和应用display属性(一)
  5. CentOS 7.0变动
  6. 在iOS中实现一个简单的画板App
  7. JAVA 调用HTTP接口POST或GET实现方式
  8. 编译用户Orcle的package中访问其它Schema的表
  9. 机械类常用英语(一.组装、冲压、喷漆等专业词汇)
  10. 聊天室后台 java php_PHP实现简单聊天室(附源码)
  11. 三角形花园和向左走(三角形性质和点集排序)
  12. 谷歌扫图识人_谷歌新的一项黑科技:手机“识人” 密码再见
  13. signature=2850cfcfebaece38f3ee6f56047eb922,A characteristic metabolic signature of breast cancer
  14. Linux命令之ll
  15. windows server 2008解决 远程桌面多帐号同时登录
  16. [渝粤教育] 中央财经大学 人力资源管理 参考 资料
  17. linux解压zip、tar压缩包
  18. layui框架学习(13:辅助元素)
  19. 操作系统 --cpu与指令集
  20. HTML如何设置幻灯片大小和位置,javascript – 动态调整skitter幻灯片图像大小

热门文章

  1. java常量配置_java项目动态配置常量和peiconfig.properties配置使用详解
  2. VMware没有虚拟网卡出现
  3. Linux关闭SELinux方法
  4. css单行文本溢出以...显示
  5. Unity游戏设计模式(二)观察者模式(Observer Pattern)
  6. 用python爬取B站在线用户人数
  7. Java 人名币转大写
  8. 数据库管理工具神器-DataGrip,可同时管理多个主流数据库[SQL Server,MySQL,Oracle等]连接
  9. 为什么要为计算机加密,什么是TPM,为什么Windows需要一个磁盘加密?
  10. https - nginx反向代理 - nginx端口映射