首页 理论教育C语言文件读写操作模式使用方法

C语言文件读写操作模式使用方法

【摘要】:前面章节讨论了将数据写入文件和从文件中读取数据的方法。在上述两方面应用的文件数据处理中,文件操作的模式应该是“读写”文件。“读写”文件的打开模式有两大类:读为主的读写类模式和写为主的读写类模式。在对文件数据读写时,必须确认读写位置指针的性质是“读位置指针”还是“写位置指针”。下面通过两个示例展示文件“读写”模式的使用方法。

前面章节讨论了将数据写入文件和从文件中读取数据的方法。在文件处理中还有两个重要的应用范畴:

·对写入文件中数据是否正确的判断;

·文件内容的更新(修改)。

在上述两方面应用的文件数据处理中,文件操作的模式应该是“读写”文件。所谓“读写”文件,就是既可以从文件中读取数据,也可以将数据写入文件的那类文件。“读写”文件的打开模式有两大类:读为主的读写类模式和写为主的读写类模式。

读为主的读写类模式包括:"r+""rb+"两种模式,用这类模式打开文件后,其读写位置指针首先是读指针。对文件数据的第一个具体操作必须是读数据的操作,否则会出错。

写为主的读写类模式包括:"w+""wb+""a+""ab+"4种模式,用这类模式打开文件后,其读写位置指针首先是写指针。对文件数据的第一个具体操作必须是写数据的操作,否则会出错。

在C语言中,用同一个数据来表示内部读或者写的位置(即文件的内部读写位置指针是同一个)。在对文件数据读写时,必须确认读写位置指针的性质是“读位置指针”还是“写位置指针”。只有当读写位置指针的性质是“读位置指针”时,才能在该位置上进行读文件数据的操作;同样,也只有当读写位置指针的性质是“写位置指针”时,才能在该位置上进行写入文件数据的操作。

在对读写类文件的操作中,C标准库函数fseek不但可以移动文件的内部读写位置指针,而且fseek每次移动记录指针后就切换文件内部读写位置指针的读/写性质(原来是“读位置指针”则切换为“写位置指针”,原来是“写位置指针”则切换为“读位置指针”)。下面通过两个示例展示文件“读写”模式的使用方法。

【例7.16】 现有一批重要的整型数据要写入文件data.txt中,为了保证文件数据写入的正确性,要求在程序中对写入文件的数据进行校验。数据校验正确显示“OK”,然后继续写入下一个数据;数据校验错误则显示“ERROR”,结束程序运行。(www.chuimin.cn)

上面程序用"w+"模式打开文件,对文件的第一个操作必须是写入数据。写入数据后,为了验证是否写入正确,使用语句fseek(f,-3,SEEK_CUR);将位置指针移回写入数据前的位置(此时位置指针的性质切换为“读位置”),然后读出刚才写入的数据,与原数据进行比较。写入数据正确时,显示提示信息“OK”,然后使用语句fseek(f,0,SEEK_CUR);将位置指针的性质切换为“写位置”,此时才能进行下一轮数据的写入。

【例7.17】 编写程序实现功能:将指定文本文件中的所有小写英文字母转换为大写字母,其余字符保持不变。

程序运行时,从文件中依次读取字符处理:当读到的是非英语小写字母时,直接读取下面一个字符;当读取到的是英语小写字母时依次进行下面的操作:

①将读取到的英语小写字母转换为大写字母(变量c的值减32);

②将文件读写位置指针移回一个字符位置(原来读取该字符的位置),同时将文件内部读写位置指针从“读位置指针”切换成“写位置指针”;

③将转换后的字符数据写回文件;

④用函数调用fseek(fp,0,SEEK_CUR)将文件内部读写位置指针从当前位置移动0个字节,即保持读写指针位置不动、将文件内部读写位置指针从“写位置指针”切换为“读位置指针”,以便正确地进行下一次数据读取操作。