博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]VC++中对文件的写入和读取
阅读量:5111 次
发布时间:2019-06-13

本文共 1963 字,大约阅读时间需要 6 分钟。

本文转自:

本文介绍两种方法对文件进行读取和写入操作:1、采用fstream类;2、采用CStdioFile类。

CStdioFile继承自CFile,一个CStdioFile对象代表一个用运行时函数fopen 打开的C 运行时流式文件。

C++中的fstream类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O。stream类有两个重要的运算符:插入器(<<)和析取器(>>)。插入器(<<)即向流输出数据,析取器(>>)即从流中输入数据。在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。fstream类包括向“流”输出数据的ofstream类和从“流”中输出数据的ifstream类。

1、文件的写入

往文件中写入数据的操作较为简单,这里以fstream类中往文件写入数据为例,介绍VC++中对文件的写入方法。对于用CstdioFile类对文件进行写入操作可参看相关资料。下面给出采用fstream类对文件进行写入操作的代码:

#include <fstream.h>

       ofstream of1;//创建对象

of1.open("数据记录.txt",ios::out,filebuf::openprot);//打开文件

       int i;//定义一个整型变量

       float f; //定义一个单精度浮点型变量

       double d; //定义一个双精度浮点型变量

       i=123;//赋值

       f=3.478f; //赋值

       d=859.653; //赋值

       of1<<i<<’\t’<<f<<’\t’<<d;//写入数据

       of1.close();//关闭文件

运行后打开“数据记录.txt”文件,内容见图1,变量i,f,d已写入文件中。

 

 

图1 打开后文件的内容

2、文件的读取

2.1 采用fstream类

采用fstream类中的析取器(>>)从第一节生成的文件“数据记录.txt”中读取数据,实现的代码如下:

ifstream if1; //创建对象

if1.open("数据记录.txt",ios::in,filebuf::openprot);//打开文件

int i; //定义一个整型变量

float f; //定义一个单精度浮点型变量

double d; //定义一个双精度浮点型变量

CString str; //定义一个Cstring类

while(!if1.eof())

{

      if1>>i>>f>>d;//读取数据

      str.Format("%d %f %lf",i,f,d);

      MessageBox(str);

}

if1.close();//关闭文件

运行结果见图2。

 

 

 

图2 读取文件的结果

值得注意的是,ifstream类中的析取器(>>)只适用天数据与数据之间是空隔(’ ’)或制表符(’\t’)分隔的情况,对于其他的分隔符,如’,’, ’;’等,若仍按上述方式读取,则会发生错误。针对这个问题,本文介绍第二种数据读取的方法。

2.2 采用CStdioFile类

采用CStdioFile类从第一节生成的文件“数据记录.txt”中读取数据,实现的代码如下:

CString string,str;//定义两个Cstring类

int i; //定义一个整型变量

float f; //定义一个单精度浮点型变量

double d; //定义一个双精度浮点型变量

CStdioFile file("数据记录.txt",CFile::modeRead);//创建CstdioFile对象

while(file.ReadString(string))//读取出一行中的所有字符

{

      string.Replace(',',' '); //将字符中的逗号’,’用空格’ ’替换掉

      string.Replace(';',' ');//将字符中的分号’;’用空格’ ’替换掉

      sscanf(string,"%d%f%lf",&i,&f,&d);//提取数据

      str.Format("%d %f %lf",i,f,d);

      MessageBox(str);

}

file.Close();//关闭文件

程序运行的结果同图2。

  代码段string.Replace(',',' ')及string.Replace(';',' ')将读取的字符串中的逗号’,’及分号’;’用空格’ ’替换掉,从而为后面提取数据打下基础。因此采用CStdioFile类从文件中读取数据比采用fstream类更为灵活。

转载于:https://www.cnblogs.com/freeliver54/p/4415170.html

你可能感兴趣的文章
[React + Functional Programming ADT] Connect State ADT Based Redux Actions to a React Application
查看>>
[RxJS] Getting Input Text with Map
查看>>
[Node.js]27. Level 5: URL Building & Doing the Request
查看>>
G Data为用户提供微软安全漏洞解决方案
查看>>
java中多线程的实例代码
查看>>
保留字段数组,一定要用char
查看>>
MySQL 忘记 root 密码重置方法
查看>>
排序之归并排序
查看>>
Windows Socket 编程 : 支持多线程(TCP)(环境:VS2010)
查看>>
BZOJ1096: [ZJOI2007]仓库建设(dp+斜率优化)
查看>>
CAS5.0.X 使用经历
查看>>
HDU 2610 (自己完全找不到思路) Sequence one
查看>>
JAVA对存储过程的调用方法(本文源于网络)
查看>>
排序思想
查看>>
linux服务器git pull/push时提示输入账号密码之免除设置
查看>>
Thinking in Java Reading Note(1.对象导论)
查看>>
3087Shuffle'm Up
查看>>
前端开发基础2(css----选择器)
查看>>
[YTU]_2636 ( B3 指向基类的指针访问派生类的成员函数)
查看>>
第一阶段冲刺8
查看>>