** 文 件 **

数据流

数据的输入和输出都必须通过计算机的外围设备,不同的外围设备对于数据的输入与输出的格式和方法有不同的处理方式,这样增加了编写文件和访问程序的难度,而且容易产生外围设备不兼容的问题,可以用数据流来解决这个问题,数据流的性质比数据的各种输入和输出更单一,它将整个文件内的数据看作一串连续的字符,而没有记录的限制

数据流借助文件指针的移动来访问数据,文件指针所指的位置即要处理的数据,经过访问文件指针会自动向后移动,,每个数据文件后面都有以恶搞文件结束符号(EOF)用来告知数据文件到此结束若文件指针指到EOF,则表示数据已经访问完毕。

文件

文件是指存放在外部存储介质上的数据集合,操作系统对外部介质上的的数据是以文件形式进行管理的,当打开一个文件或创建一个新文件时,一个数据流和一个外部文件关联,为了标识一个文件每个文件都必须有一个文件名作为访问文件的标志。

文件名 .扩展名

通常情况下,应该包括盘符名,路径,住文件名和文件扩展名4部分信息程序在内存运行过程中与外存交互主要通过以下两种方法

1.以文件为单位将数据写到外存中

2.从外存中根据文件名读取文件中的数据

尧都区外部存储介质中的数据,必须先按照文件名找到相应的文件,然后从文件中读取数据,要将数据存储到外部介质中首先要在外部介质上建立一个文件,然后向该文件中写入数据

c语言支持数据流 ,它把文件看作一个字节序列,以字节为单位进行访问,没有记录的界限即数据的输入和输出的开始和结束仅受程序控制而不受物理符号(如回车符)的控制

可以将文件从不同角度分类

1.根据文件依附的介质可以分为普通文件和设备文件

2.根据文件的组织形式,可分为顺序读写文件和随机读写文件

3.根据文件存储形式,可分为ASCII码文件和二进制文件

ASCII文件(ASCII File),指含有用标准ASCII字符集编码的字符的数据和文本文件。文本文件(如字处理文件、批处理文件和源语言程序)通常都是ASCII文件,因为它们只含有字母、数字和常见的符号。

中文名

ASCII文件

外文名

ASCII File

含    义

含有标准字符的数据和文本文件

特    点

只含有字母、数字和常见的符号

信息在计算机上是用二进制表示的,这种表示法让人理解就很困难。因此计算机上都配有输入和输出设备,这些设备的主要目的就是,以一种人类可阅读的形式将信息在这些设备上显示出来供人阅读理解。为保证人类和设备,设备和计算机之间能进行正确的信息交换,人们编制的统一的信息交换代码,这就是ASCII码表,它的全称是“美国信息交换标准代码”。

二进制文件的储存方式

列举一个二进制文件如下:

00000000h:0F 01 00 00 0F 03 00 00 12 53 21 45 58 62 35 34; .........S!EXb54

00000010h:41 42 43 44 45 46 47 48 49 47 4B 4C 4D 4E 4F 50; ABCDEFGHIGKLMNOP

这里列出的是在 UltraEdit(UE) 里看到的东西。其实只有红色部分是文件内容。前面的是 UE 加入的行号。后面的是 UE 尝试解释为字符型的参考。

这个文件一共有 32 字节长。显示为两列,每列 16 个字节。实际上,这仅仅是 UE 的显示而已。真实的文件并不分行。仅仅知道这个文件的内容,如果我们没有任何说明的话,是不能看出任何有用信息的。

下面我规定一下说明:我们认为,前 4 个字节是一个 4 字节的整型数据(0F 01 00 00 十六进制:10Fh 十进制:271)。这 4 个字节之后的 4 个字节是另一个 4 字节的整型数据(0F 03 00 00 十六进制:30Fh 十进制:783)。其后的 4 个字节(12 53 21 45 )表示一个 4 字节的实型数据:2.5811919E+3。再其后的 4 个字节(58 62 35 34)表示另一个 4 字节的实行数据:1.6892716E-7。而只后的 16 个字节(41 42 43 44 45 46 47 48 49 47 4B 4C 4D 4E 4F 50)我们认为是 16 个字节的字符串(ABCDEFGHIGKLMNOP)

实际上,二进制文件只是储存数据,并不写明数据类型,比如上面的第 9 字节到第 16 字节(12 53 21 45 58 62 35 34),我们刚才认为是 2 个 4 字节的实型,其实也可以认为是 8 个字节的字符型( S!EXb54)。而后面的 16 个字节的字符串(ABCDEFGHIGKLMNOP),我们也可以认为是 2 个 8 字节的整型,或者 4 个 4 字节的整型,甚至 2 个 8 字节的实型,4 个 4 字节的实型,等等等等。

因此,面对一个二进制文件,我们不能准确地知道它的含义,我们需要他的数据储存方式的说明。这个说明告诉我们第几个字节到第几个字节是什么类型的数据,储存的数据是什么含义。否则的话,我们只能猜测,或者无能为力。 [1] 

如何使用语句操作二进制文件

我们将上面的那个二进制文件保存为:TestBin.Bin 来举例。

读取和写入二进制其实是两个很类似的操作,了解了其中之一,另一个也就不难了。

二进制文件我们通常使用直接读取方式,Open 语句可以写为:

引用

Open( 12 , File = 'TestBin.Bin' , Access = 'Direct' , Form = 'Unformatted' , RecL = 4 )

上面的 Access 表示直接读取方式,Form 表示无格式储存。比较重要的是 RecL 。我们读取数据时,是用记录来描述单位的,每一次读入或写入是一个记录。记录的长度在 Open 时就确定下来,以后不能改变。如果需要改变,只能 Close 以后再此 Open。

记录长度在某些编译器下表示读取的 4 字节长度的倍数,规定为 4 表示记录长度为 16 字节。有些编译器下就直接表示记录的字节数,规定为 4 则表示记录长度为 4 字节。这个问题需要参考编译器手册。在 VF 系列里,这个值是前面一个含义。可以通过设置工程属性的 Fortran,Data,Use Bytes as RECL= Unit for Unformatted Files 来改变,使之成为后一个含义。在命令行模式下,则使用 /assume:byterecl 这个编译选项。

确定 RecL 大小是我们需要做的事情,一般来说,不适合太大,也不适合太小。还需要结合数据储存方式来考虑。太小的话,我们需要执行读写的次数就多,太大的话,我们就不方便操作小范围的数据。

有时候我们甚至会分多次来读取数据,每一次的 RecL 都不同。对于上面的 TestBin.Bin 文件来说,它比较简单,我以 16 字节长度和 8 字节长度两种读取方式来演示,你甚至可以一次 32 个字节长度全部读完。 [

文件的操作流程

1.建立/打开文件

2.从文件中读取数据或者向文件中写数据

3.关闭文件

在c语言 中,所有的文件操作都是由文件处理函数完成的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值