浅谈C/C++文件流的操作
转自:微点阅读 https://www.weidianyuedu.com/content/3417507553653.html
C/C++文件流
文件流是以外存文件为输入/输出对象的数据流。输出文件流是从内存流向外存文件的数据,输入文件流是从外存文件流向内存的数据。每一个文件都有一个内存缓冲区与之对应。这里主要讨论两种文件的操作。
3.3.1 ASCII 文件的操作
程序描述:从键盘读入一行字符,把其中的字母字符依次存放在磁盘文件f2.dat 中,再将此磁盘文件读入程序,将其中的小写字母改为大写字母,并存入磁盘文件f3.dat。
【源程序 3-3】
01 #include <fstream>
02 using namespace std;
03 void save_to_file()
04 {
05 ofstream outfile("f2.dat",ios::out);
06 if(!outfile)
07 {
08 cerr<<"open f2.dat error!"<<endl;
09 exit(1); //退出程序
10 }
11 char c[80];
12 cin.getline(c,80); //从键盘读入一行字符
13 for(int i=0;c[i]!=0;i++)
14 if(c[i]>=65&&c[i]<=90||c[i]>=97&&c[i]<=122)
15 {
16 outfile.put(c[i]); //将字母字符存入磁盘文件f2.dat
17 cout<<c[i]; //输出到显示器显示
18 }
19 cout<<endl;
20 outfile.close(); //关闭f2.dat 文件
21 }
22 void get_from_file()
23 {
24 char ch;
25 ifstream infile("f2.dat",ios::in|ios::nocreate);
26 if(!infile)
27 {
28 cerr<<"open f2.dat error!"<<endl;
29 exit(1);
30 }
31 ofstream outfile("f3.dat");
32 if(!outfile)
33 {
34 cerr<<"open f3.dat error!"<<endl;
35 exit(1);
36 }
37 while(infile.get(ch)) //流成员函数get 读入一个字符
38 {
39 if(ch>=97&&ch<=122) //判断是否为小写字母
40 ch=ch-32;
41 outfile.put(ch); //流成员函数put 输出字符存入f3.dat
42 cout<<ch;
43 }
44 cout<<endl;
45 infile.close(); //关闭磁盘文件f2.dat
46 outfile.close(); //关闭磁盘文件f3.dat
47 }
48 int main()
49 {
50 save_to_file();
51 get_from_file();
52 return 0;
53 }
程序说明:
(1) 第3 行,函数save_to_file()从键盘读入一行字符,并将其中的字母存入磁盘文件。
(2) 第5 行,定义输出文件流对象outfile,以输出方式打开磁盘文件f2.dat。
(3) 第22 行,函数get_from_file()从磁盘文件f2.dat 读入字母字符,将其中的小写字母改为大写字母,再存入f3.dat。
(4) 第25 行,定义输入文件流对象infile,以输入方式打开磁盘文件f2.dat。
知识点:
(1) 磁盘文件中的内容是ASCII 字符,但人们不能直接看到,可用DOS 环境下的TYPE命令查看。TYPE 命令格式为
TYPE <文件名>
(2) ASCII 文件的读/写有两种方法:
① 用流插入运算符“<<”和流提取运算符“>>”输入/输出标准类型的数据;
② 通过文件流的put,get,getline 等成员函数进行字符的输入/输出。
二进制文件的操作
程序描述:将以二进制形式存放在磁盘文件中的数据读入内存并在显示器上显示。
【源程序 3-4】
01 #include <fstream>
02 using namespace std;
03 struct student
04 {
05 string name;
06 int num;
07 int age;
08 char sex;
09 };
10 int main()
11 {
12 student stud[3];
13 int i;
14 ifstream infile("stud.dat",ios::binary);
15 if(!infile)
16 {
17 cerr<<"open error!"<<endl;
18 abort();
19 }
20 for(i=0;i<3;i++)
21 infile.read((char*)&stud[i],sizeof(stud[i]));
22 infile.close();
23 for(i=0;i<3;i++)
24 {
25 cout<<"NO."<<i+1<<endl;
26 cout<<"name:"<<stud[i].name<<endl;
27 cout<<"num:"<<stud[i].num<<endl;
28 cout<<"age:"<<stud[i].age<<endl;
29 cout<<"sex:"<<stud[i].sex<<endl<<endl;
30 }
31 return 0;
32 }
程序说明:
(1) 第14 行打开文件。
(2) 第18 行退出程序,与exit()函数的作用相同。
(3) 第21 行用成员函数读取二进制文件。
(4) 第22 行关闭文件。
知识点:
(1) 对二进制文件进行操作前应先打开文件,使用完毕后要关闭文件。打开文件要用
ios::binary 指定以二进制形式传送和存储。
(2) 可以一次性读入文件中的全部数据,将infile.read((char*)&stud[i],sizeof(stud[i]))语句改为infile.read((char*)&stud[0],sizeof(stud))即可。
(3) 二进制文件不是以ASCII 代码存储数据的,它将内存中的数据存储范文大全形式不加转换地传送到磁盘文件。因此,二进制文件中的信息不是字符数据,而是二进制形式的信息。
浅谈C/C++文件流的操作相关推荐
- java双层list扁平化,浅谈java8 stream flatMap流的扁平化操作
概念: Steam 是Java8 提出的一个新概念,不是输入输出的 Stream 流,而是一种用函数式编程方式在集合类上进行复杂操作的工具.简而言之,是以内部迭代的方式处理集合数据的操作,内部迭代可以 ...
- file相对路径java_浅谈java 中文件的读取File、以及相对路径的问题
一.对于java项目中文件的读取 1.使用system 或是 系统的properties对象 ①直接是使用 string relativelypath=system.getproperty(" ...
- python语言源程序文件类型_浅谈Python的文件类型
Python的文件类型主要分为3种:源代码(source file).字节码(byte-code file).优化的字节码(optimized file).这些代码都可以直接运行,不需要编译或者连接. ...
- [转载]对文件流进行操作
原文地址:对文件流进行操作作者:蒙面侠客 对流进行操作时要引用 using System.Text; 命名空间 FileStream常用的属性和方法: 属性: CanRead 判断当前 ...
- 浅谈sstream头文件
在使用istreamstring,ostreamstring,streamstring的时候要用到sstream这个头文件. 在刚开始使用的时候很蒙,完全不会用,现在来谈一下这个很棒的头文件. sst ...
- java中有关文件流的操作
文件流: 顾名思义,程序和文件打交道. 此时我们谈及的文件,值得是纯文本文件(txt的,不要使用Word,Excel), 在字节流中,暂时不要使用中文. FileInputStream: 文件的字节输 ...
- java中pdf写成base64文件流,Java操作pdf文件与Base64编码相互转换与文件流操作
1.第一步,引入bc包的安装依赖. 在pom.xml中引入. org.bouncycastle bcprov-jdk15on 1.60 引入后reimport一下项目. 2.pdf文件转换成Base6 ...
- java 写文件 高效_java高效文件流读写操作详解|chu
导语 防止自己以后忘记,记录一些文件流的性能对比. 平常经常会操作到文件读写,java当中提供了许多操作文件的类,一般来说,文件操作也叫流操作,可以按照以下方式分类:按照功能分类,字节流和字符流. 按 ...
- java接收文件流并操作文件流
1.controller层 @PostMapping("/upload")public Resp upload(@RequestParam MultipartFile multip ...
最新文章
- SiteView NNM安装
- java,阳历转阴历
- EVT DVT PVT TP PP MP分别指哪个阶段
- “产教融合新范式,校企聚力新实践”——2018杭州云栖大会大学合作专场论坛成功举办...
- 如何用php编写注册表格,发布PHP-MySQL注册表格
- 创业感悟:技术兄弟为什么一直没有起来(1)
- “别傻了,你不需要区块链!”
- mysql中kill掉所有锁表的进程
- 了解计算机技术的课件,了解计算机课件.ppt
- ocx注册以及检测(转)
- VxWorks Fuzzing 之道:VxWorks 工控实时操作系统漏洞挖掘调试与利用揭秘
- 【LLS-Player】VS构建
- 移动机器人c语言程序设计,机器人辅助C程序设计
- Mybatis基础学习之万能的Map和模糊查询
- 计算机科学概论第三版重点,计算机科学概论重点.doc
- 计挑赛初赛试题(2020)(一)
- MAC-MAC-MAC-MAC
- 结构方程模型(SEM)在生态学领域中的实践
- openldap备份脚本
- 关于nxp平台上i2c扫描不到wm8960地址的问题
热门文章
- OPPO和华为手机哪个性价比高?热门代表对比立分高下
- 如何使用Vegas给视频添加LOGO?
- [云原生 | ubuntu Docker卸载] ubuntu中docker彻底卸载
- 长期主义被滥用,知行合一更重要
- 解决IDEA插件安装慢、超时、不成功的方法
- 2021.1.20--备战信息系统项目管理师学习笔记
- 监控页面所有input框的输入,并进行过滤
- R语言使用crossprod函数和tcrossprod函数计算矩阵matrix交叉积(Matrix Cross Product)、crossprod函数、tcrossprod函数计算矩阵和向量的交叉积
- 各项异性高光 Kajiya-Kay TDir or BDir
- Leetcode015. 三数之和