使用随机存取储存取文件流

您当前所在位置: >
> 编辑语言
C++中随机存取文件的处理
在本文中,我们所讲的是怎样使用C++中的随机存取文件。除了最简单的应用程序以外,大多数程序都需要读写文件。或许只是为了读取一个配置文件,一个文本解析器或更为复杂的什么东西。和许多的C++程序一样,下面我们给大家介绍一下C++中随机存取文件吧!
基本的文件操作有
&fopen&&打开文件,指定文件以怎样的方式打开(读/写)以及类型(二进制/文本)
&fclose&&关闭已经打开的文件
&fread&&读取文件
&fwrite&&写文件
&fseek/fsetpos&&将文件指示器转移到文件中的某一地方
&ftell/fgetpos&&可以告诉你文件指示器所在的位置
文件有两种基本类型:文本和二进制。在这两者之中,通常二进制类型是较容易解决的。由于在文本中处理随机存取并不常用,我们会在本文中重点关注二进制文件的处理。上面列出的操作中的前四项可用于文本文件和随机存取文件。后面的两项则仅用于随机存取。
随机存取意味着我们可以在文件的任意部分之间进行切换,且可以从中读写数据而不需要通读整篇文件。
二进制文件
二进制文件是任意长度的文件,它保存有从0到0xff(0到255)不等的字节值。这些字节在二进制文件中没有任何意义,与此不同的是,在文本文件中,值为13就意味着回车,10意味着换行,26意味着文件结束,而读取文本文件的软件要能够解决这些问题。
在现在的术语中,我们将二进制文件称为包含了字节的字符流,大多数语言倾向于将其理解为字符流而不是文件。重要的部分是数据流本身而不是其来源。在C语言中,你能从文件或数据流方面来考虑数据。或者,你可以将其理解为一组长的数组。通过随机存取,你可以读写数组的任意部分。
// ex1.c : Defines the entry point for the console application.
#include & stdio.h&
#include & string.h&
#include & windows.h&
int FileSuccess(FILE * handle,const char * reason, const char * path) {
OutputDebugString( reason );
OutputDebugString( path );
OutputDebugString(& Result : &);
if (handle==0)
OutputDebugString(&Failed&);
OutputDebugString(&Suceeded&);
int main(int argc, char * argv[])
const char * filename=&test.txt&;
const char * mytext=&Once upon a time there were three bears.&;
int byteswritten=0;
FILE * ft= fopen(filename, &wb&);
if (FileSuccess(ft,&Opening File: &, filename)) {
fwrite(mytext,sizeof(char),strlen(mytext), ft);
fclose( ft );
printf(&len of mytext = %i &,strlen(mytext));
这段代码显示了一个简单的打开待写的二进制文件,文本字符(char*)会写入该文件。通常你会使用文本文件但是笔者想证明你可以向二进制文件写入文本。
#include & stdio.h&
#include & string.h&
int main(int argc, char * argv[])
const char * filename=&test.txt&;
const char * mytext=&Once upon a time there were three bears.&;
int byteswritten=0;
FILE * ft= fopen(filename, &wb&) ;
fwrite(mytext,sizeof(char),strlen(mytext), ft) ;
fclose( ft ) ;
printf(&len of mytext = %i &,strlen(mytext)) ;
例一的作用
这个例子打开了一个待写的二进制文件。FILE*变量从fopen()调用中返回。如果这一操作失败那么它会返回为0.
Fopen()命令试图打开指定的文件,在这个案例中则是位于相同文件夹的test.txt.记住,如果文件包含一个路径那么所有的退格必须重叠。&c:\folder\test.txt&是错误的,你必须使用&c:\\folder\\test.txt&。
由于文件样式是wb,我们正准备写入二进制文件。如果文件不存在则系统会创建一个文件,如果存在,则里面的内容都会被删除。如果调用fopen失败了,或许由于文件被打开了,或者其名称包括无效字符又或者一个无效路径那么fopen会返回0值。
虽然你可以只检查ft是否为0(值为0则成功),但是笔者还是添加了一个FileSuccess()函数来确保这一操作。在窗口中,它会显示调用是否成功以及文件名称。如果你失败了则可能需要修复。注意在Windows中一般没有多少输出文本可供系统调试器使用,
fwrite(mytext,sizeof(char),strlen(mytext), ft) ;
fwrite()调用输出了指定文本。第二,三个参数分别是字符的大小和字符串的长度。它们两个都是被size_t定义了。注意有了二进制文件后,即便你正在向文件中写入(char*)字符串,它也没有任何附加换行字符。如果你想要这些字符,你必须明确将这些字符包含到字符串中。
打开一个文件的时候,必须指定打开的方式。这意味着如果你打算要为文件附加东西,那么是否要创建新文件并对其进行覆盖?它是文本文件还是二进制文件呢?是要读取文件还是要写文件呢?这样要通过使用一个或更多的文件模式分类符来完成,文件模式分类符是一些单独的字母&r&,&b&,&w&,&a&和+.&r&意思是打开文件以便读取。如果文件不存在或找不到文件这一操作会失败。&w&意思是待写方式或空文件方式打开文件。如果文件存在,则文件内容会被损坏。&a&表示打开文件,并准备从文件末端写入而不需要在写入新数据前删除EOF标记;如果不存在该文件则首先会创建一个文件。向文件模型添加+会创建下列三种新模型:
&r+&打开文件等待读取或写入。&w+&以空文件方式打开文件等待读取或写入。如果文件存在,则文件内容会被损毁。
&a+&打开文件等待读取或添加,添加的操作包括新数据写入前EOF标记的移除,以及写入完成后EOF标记的保存,如果文件不存在则先要创建文件。
下面的列表显示了字码组合包括文本的和二进制文件的。通常你可以选择从文本文件中读取或写入文件,但是不要两者同时使用。
就二进制文件而言,你可以选择对相同文件进行读取和写入的操作。列表告诉了我们可以用字码进行哪些操作。
Mode Type of file Read Write Create Truncate
r text Read
rb+ binary Read
r+ text Read Write
r+b binary Read Write
rb+ binary Read Write
w text Write Create Truncate
wb binary Write Create Truncate
w+ text Read Write Create Truncate
w+b binary Read Write Create Truncate
wb+ binary Read Write Create Truncate
a text Write Create
ab binary Write Create
a+ text Read Write Create
a+b binary Write Create
ab+ binary Write Create
就笔者的经验来看,除非你刚刚创建完文件或读取完文件,否则你通过使用&w+b&只能侥幸成功。
还有一些情况允许其他字母存在。例如微软运行&t&代表文本模式,&c&用于认可,&n&用于非认可,&S&为顺序存取优化缓冲,&R&代表随机存取,&T&代表临时性而&D&用于 删除/临时性保存。
使用二进制文件的主要原因是可以获得灵活性;你可以读取或写入文件的任意部分。文本文件只能让你按照顺序读取或写入。现在随着SQLite或MySQL数据库的普及,在二进制文件中使用随机存取的需要减少了。从某种意义上说,随机存取文件记录有点老土了,但是仍然还是有用的。
笔者在数据库普及之前就使用过基于随机存取文件的多种数据处理方案。例如,在小文件中,笔者使用的是 索引/数据 文件模式。该模式包括两个文件。一个是数据文件,它保存了一些长短不一的记录。另一种文件是索引文件,这样的文件拥有同样的记录作为数据文件。但是在索引文件中每个记录的长度相同而且都由两个适合结构的部分组成。
struct {??fpos_?? }
类型fpos_t是由fsetpos()和fgetpos()定义和使用的执行。这些是fseek和ftell更新的版本且更有助于创建书签。如果你正在计算文件闻之且需要设定文件那么你应该使用fseek(),另外ftell()也可以给你int的当前位置。
在实际操作中,fpos_t可能只是一个int但是你应该使用fpos_t类型。它保存了当前文件指示器的副本。这是随机存取文件的属性,它表明了下一次读取或写入的位置。它的粒度为一,因此你可以将其放在文件的任意位置。
以上就是我们给大家介绍的C++中随机存取文件了。希望大家继续关注我们的网站!
上一篇:下一篇:
本文相关阅读
高校查询分数线
考生所在地
北京天津辽宁吉林黑龙江上海江苏浙江安徽福建山东湖北湖南广东重庆四川陕西甘肃河北山西内蒙古河南海南广西贵州云南西藏青海宁夏新疆江西香港澳门台湾
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
地区批次线查询
考生所在地
北京天津辽宁吉林黑龙江上海江苏浙江安徽福建山东湖北湖南广东重庆四川陕西甘肃河北山西内蒙古河南海南广西贵州云南西藏青海宁夏新疆江西香港澳门台湾
科目理科文科综合其他
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
<option value="
院校所在地北京天津辽宁吉林黑龙江上海江苏浙江安徽福建山东湖北湖南广东重庆四川陕西甘肃河北山西内蒙古河南海南广西贵州云南西藏青海宁夏新疆江西香港澳门台湾
其它中央部委
类型工科农业师范民族
层次本科高职(专科)
高考志愿③部曲
频道热门推荐
栏目最新更新随机存储器有哪些 不同类型的随机存储器千差万别 - 办公设备 - 土巴兔装修网
随机存储器有哪些 不同类型的随机存储器千差万别
报价结果将发送到您的手机
装修顾问-馨馨
4年行业经验,24h可咨询
10秒闪电通过好友
您的装修预算约
*装修管家将回电您,免费提供装修咨询服务
*因材料品牌及工程量不同,具体报价以量房实测为准
装修顾问 -馨馨
(四年装修行业经验)
微信扫一扫
随机存储器有哪些 不同类型的随机存储器千差万别
&&&&来源:
微信 手机看本文
更多装修流程、装修风水随时看
导语:对于随机存储器,大多数人都还是比价陌生的。我们对它的了解似乎只是朦朦胧胧地知道它是一种小型的存储设备。但是它究竟有什么不一样的地方,到底有哪些种类,我们大多数人都是一无所知。本文将为大家简单介绍关于随机存储器的知识,为大家“科普”一下。&随机存存储是一种能够与CPU直接进行数据交换的内部存储器。它可以快捷地与CPU进行临时的数据交换,所以它的读入与写入的速度都是非常的快的,在手机、电脑等的操作系统中,随机存储器都是用来做临时文件的存储媒介,这样的话,这些重要的临时数据就会被高速地写入,从而方便了使用。随机存储器并非只有单一的一个种类,它根据自己的存储单元的运行原理的不同,可以分为静态随机存储器和动态随机存储器两类。下面为大家着重介绍这两种随机存储器的有关知识。静态随机存储器静态随机存储器是随机存储器的一个重要的组成部分。它是由静态存储单元组成的存储设备。它不需要利用电路的不断刷新来完成工作,也就是说,它不会因为更换电池等刷新电路的操作,而造成数据的流失它能够持久的保存数据,任何数据被静态随机存储器写入,就会真的像被“安静”地放置在存储器中,保存数据的能力较强。但是它也有着不可忽视的弱点,这就在于静态随机存储器的集成度远远没有动态随机存储器的集成度高,也就是说,相同体积的静态存储器的容量要低于动态存储器许多。这就是为什么手机这样的小巧设备的RAM不用静态随机存储器,而选用动态随机存储器的原因。不过,一些用来存储重要资料的计算机常常使用的是静态随机存储器。动态随机存储器动态随机存储器的工作原理和应用与静态随机存储器恰恰相反。&&&动态随机存储器是使用最为广泛地随机存储器,我们使用的手机以及大多数电脑所使用的随机存储设备大都是动态随机存储器。它属于一种存储器,使用一段时间就需要将电路刷新一次,通过电流的刷新以达到更新数据的效果,它的集成度比较高,存储容量大。但是,它也有着不容忽视的缺点,就是数据容易丢失,如果一段时间内,存储系统没有得到更新,就会造成数据的丢失,所以各位在使用含有动态随机存储器的设备时,一定要慎之又慎,谨防数据的丢失。
热门活动:
&看过本文的人还看过
来说两句吧:)
来说两句吧:)
电视背景墙就要这样弄 太漂亮了!
旧房巧翻新方法介绍 很全面很实用!
新房除甲醛最有效方法排行榜
北欧简约、复古美式、大气欧式、清新地中海风,总有一款适合你!
推荐城市分站&&
一万套装修案例
中国装修网京ICP证号&&
京网文[3号&&
Copyright (C) 2017 Baidu《Java高级编程项目化教程》(林萍)【摘要_书评_试读】- 蔚蓝网
共有图书2984249种
顾客评分:
已有0人评论
字数:321000&&&&&
页数:215&&&&&
开本:16开&&&&&
包装:平装
本书以培养学生的实际动手能力为中心目标,以职业素质为突破点,以实用技能为核心,以案例为驱动,以讲练结合为训练思路,首先讲解面向对象的三大特性及其应用;然后讲解异常、集合类、I/O读写;多线程技术。通过学习本书,程序员在编程过程中能够逐渐精通面向对象和业务知识,架构师。 本书适合有一定编程基础的读者,可作为高职高专计算机相关专业高年级学生的Java课程强化教材。
第P章 &Java面向对象语言基础 1.1 &一切事物皆对象 & 1.2 &方法的声明与使用 & 1.3 &数组 1.4 Java代码规范 本章小结 & 上机练习l & 习题l &第2章 &抽象和封装  2.1 &使用面向对象进行设计 2.2 &使用构造方法初始化属性 2.3 &使用封装优化系统设计 本章小结 & 上机练习2 & 习题2 &第3章 &继承  3.1 &使用继承优化设计 3.2 &子类重写父类方法 3.3 &父类声明和子类实例化 本章小结 & 上机练习3 & 习题3 &第4章 &多态  4.1 &什么是多态 4.2 &抽象类 4.3 &父类和子类相互转换 本章小结 上机练习4 & 习题4 &第6章 &接口、常用修饰符和包  5.l &接口的定义与使用 5.2 &static和final修饰符 5.3 &其他修饰符 5.4 &包 本章小结 上机练习5 & 习题5 &第8章 &异常  6.1 &异常的产生 6.2 &异常的处理 6.3 &异常的原理 6.4 &自定义异常 本章小结 上机练习6 习题6第7章 &I/O读取、存储数据  7.1 &简单的文件读写 7.2 &I/O原理和结构 7.3 &其他常用流的使用 7.4 &随机存储存取文件流和File类 本章小结 上机练习7 习题7第8章 &Java集合框架  8.1 &使用List集合随机选取学生 8.2 &集合框架的结构 8.3 &迭代器 8.4 &Java泛型 本章小结 ……第9章 Java图形用户界面第10章 多线程参考答案参考文献
0人参与评分
很好(5星,4星):
一般(3星,2星):
不推荐(1星):&&&
写购物评价,赢购物积分,可换购物券!好书不要私藏哦,分享给别人吧!
温馨提示:由于每位咨询者提问时间及蔚蓝网促销等不同原因,以下回复仅对提问者3天内有效,其他网友仅供参考!
1件商品成功放入购物车
购物车共件商品,商品金额合计¥97.10
购物车中已有该商品
非常报歉,本商品没有库存暂时无法购买,如果您仍需要该图书
请输入邮箱做缺货登记,到货后我们会给您发邮件通知。
非常抱歉,您购买的数量超过库存,当前最多可买303件,请您修改。

我要回帖

更多关于 随机存取存储器 的文章

 

随机推荐