本文转自:http://blog.csdn.net/fanghb_1984/article/details/7425705

本文介绍两种方法对文件进行读取和写入操作: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类更为灵活。

[转]VC++中对文件的写入和读取的更多相关文章

  1. 在C#程序中,创建、写入、读取XML文件的方法

    一.在C#程序中,创建.写入.读取XML文件的方法 1.创建和读取XML文件的方法,Values为需要写入的值 private void WriteXML(string Values) { //保存的 ...

  2. INI文件的写入与读取

    INI文件的写入与读取 [节名]         '[]中的节名对应此API的第一参数 Name=内容      'Nmae对应此API的第二参数 API的第三参数是没有取到匹配内容时返回的字符串; ...

  3. 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取

    装饰者模式的学习(c#) 案例转自https://www.cnblogs.com/stonefeng/p/5679638.html //主体基类 using System;using System.C ...

  4. java中常量文件的配置与读取

    java中常量文件的配置与读取: package com.floor.shop.user.util; import java.io.InputStream; import java.io.InputS ...

  5. VC中对文件的读写

    http://www.cnblogs.com/LJWJL/archive/2012/10/06/2712466.html 注意: 1.由于C是缓冲写 所以要在关闭或刷新后才能看到文件内容 2.电脑处理 ...

  6. 【转】VC中对文件的读写

    原文网址:http://www.cnblogs.com/LJWJL/archive/2012/10/06/2712466.html 注意: 1.由于C是缓冲写 所以要在关闭或刷新后才能看到文件内容 2 ...

  7. Java file文件的写入和读取及下载

    File文件的写入 一.FileWriter 和BufferedWriter 结合写入文件 FileWriter是字符流写入字符到文件.默认情况下,它会使用新的内容代替文件原有的所有内容,但是,当指定 ...

  8. java 文件操作 写入和读取(小结一)

    参考了这篇博客并优化,谢谢:http://blog.sina.com.cn/s/blog_99201d890101b4le.html 功能:  实现通过两个类完成先写入文件,再读取数据计算显示 pac ...

  9. python txt文件的写入和读取

    1.文件的打开 使用open () 函数 打开文件.他有两个参数,文件路径或文件名和文件的打开方式. "r" 只读模式,不能编辑和删除文件内容. "w" 写入模 ...

随机推荐

  1. gcc 头文件是用户应用程序和函数库之间的桥梁和纽带 功能的真正逻辑实现是以硬件层为基础

    gcc GCC, the GNU Compiler Collection - GNU Project - Free Software Foundation (FSF) http://gcc.gnu.o ...

  2. URAL 1731. Dill(数学啊 )

    题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1731 1731. Dill Time limit: 0.5 second Memory ...

  3. [译]Flutter JSON和序列化

    [译]Flutter JSON和序列化   很难想象一个移动应用程序不需要与Web服务器通信或在某些时候容易存储结构化数据.制作网络连接的应用程序时,迟早需要消耗一些好的旧JSON. 本指南介绍了如何 ...

  4. redis03----link 链表操作

    link 链表结构 之前是操作字符串string 链表:头元素,后面一个一个的指向后面的元素.Redis内部实现了链表的结构.链表的头尾,从一个元素找到另外的元素. 链表的名字也是一个key. flu ...

  5. WinDbg 在64位系统下转储32位进程

    在64位系统下,首先要判断进程是32位,还是64位 在Win8之前,进程名后带星号(*)则是32位进程.但Win8.1后,则不显示星号.需要选出“平台”列,来确认32位,还是64位. 在64位系统下的 ...

  6. 以太坊EVM在安全性方面的考虑

    以太坊上用户编写的合约是不可控的,要保证这些合约能够正确执行并且不会影响区块链的稳定,虚拟机需要做安全方面的考虑. 1 在程序执行过程中采取的每个计算步骤都必须提前支付费用, 从而防止DoS攻击.先消 ...

  7. hdu 5615 Jam's math problem(十字相乘判定)

    d. Jam有道数学题想向你请教一下,他刚刚学会因式分解比如说,x^2+6x+5=(x+1)(x+5) 就好像形如 ax^2+bx+c => pqx^2+(qk+mp)x+km=(px+k)(q ...

  8. magento导入数据的方法

    导入演示数据 分两种情况处理. 如果你是用composer方式安装的 非常简单,二行命令搞定:在项目根目录下执行.我们的是在/var/www/magento2/下面. 安装演示数据 php bin/m ...

  9. 「SHOI2007」「Codevs2341」 善意的投票(最小割

    2341 善意的投票 2007年省队选拔赛上海市队选拔赛 时间限制: 5 s 空间限制: 128000 KB 题目等级 : 大师 Master   题目描述 Description 幼儿园里有n个小朋 ...

  10. CentOS下安装SecureCRT的sz/rz工具包

    对于使用SecureCRT的玩家,rzsz是一个灰常灰常实用的功能.但是定制安装的linux可能没有把rzsz包安装到系统,这对用securecrt这样的windows工具传输文件特别不方便.为了使用 ...