当前位置: 首页 > news >正文

在线做试卷的网站青海网站建设与维护

在线做试卷的网站,青海网站建设与维护,网站建设面试问题,新乡网站设计公司目录 四、有关文件的随机读写函数 4.1 fseek 4.2 ftell 4.3 rewind 五、判定文件读取结束的标准与读写文件中途发生错误的解决办法 5.1 判定文件读取结束的标准 5.2 函数ferror与feof 5.2.1 函数ferror 5.2.2 函数feof 在上一章中,我们主要介绍了文件类型…

目录

四、有关文件的随机读写函数

4.1 fseek

4.2 ftell

4.3 rewind

五、判定文件读取结束的标准与读写文件中途发生错误的解决办法

5.1 判定文件读取结束的标准

5.2 函数ferror与feof

5.2.1 函数ferror

5.2.2 函数feof 


在上一章中,我们主要介绍了文件类型指针如何打开与关闭文件什么是流与标准流,以及提到的部分顺序读写函数

C语言| 文件操作详解 (一)

这篇文章为上篇文章的续,将对有关文件随机读写的函数 fseek、ftell 、rewind 进行介绍,并解释判定文件读取结束的标准与读写文件中途发生错误的解决办法

四、有关文件的随机读写函数

4.1 fseek

介绍:该函数主要用于改变文件中光标(就是我们打字的时候一闪一闪的小竖线)的位置,(这里说光标是为了便于理解,实际上是文件指针),再利用相关函数输入内容后,新内容会覆盖在该位置上的原内容。

例如,在打开的某个文件中有以下内容:“abcdef”,其中光标在‘c’之后(即相对于文件起始光标位置,偏移量为3),此时利用fputc在文件上打印一个字母m,则文件内容最终变为“abcmef”。

函数声明:

int  fseek ( FILE* stream,long int offset,int origin );

参数:

(1) 指向标识输入流的FILE对象的指针;

(2) 要从源偏移的字节数,即偏移量;

(3) 偏移量所参考的起始位置,即源的值;

对于参数(3),源的位置值,我们一般填入下表中三个常量的一个。

常量参考位置
SEEK_SET文件开头
SEEK_CUR文件指针的当前位置
SEEK_END文件末尾

返回值:

成功则返回0,否则返回非0值;如果发生读取或写入错误,则会设置错误指示符。

使用示例:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{	FILE* pf = fopen("233.txt", "w");fputs("There has a boy", pf);fseek(pf, 12, SEEK_SET);fputc('g', pf);fputc('i', pf);fputc('r', pf);fputc('l', pf);fclose(pf);return 0;
}

4.2 ftell

介绍:该函数用于返回文件指针相对于起始位置的偏移量。

函数声明:

long int ftell ( FILE * stream ) ;

参数:

指向标识流的FILE对象的指针

返回值:

成功则返回相对于文件指针初始位置的偏移量,失败则返回-1L;

使用示例:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{	FILE* pf = fopen("example.txt", "rb");long long size = 0;if (pf == NULL)perror("Error opening file");else {fseek(pf, 0, SEEK_END);size = ftell(pf);fclose(pf);printf("该文件的大小为%ld字节\n",size);}return 0;
}

PS:

顺便解释一下为什么上述代码可以检测文件的字节大小,因为一个字符占一个偏移量,只要得到文件末尾相对于文件初始位置的偏移量 ,就可以得到文件的字符数,而一个字符占一个字节(char型),所以可以得到文件的字节大小。

4.3 rewind

介绍:该函数用于将文件指针的位置重置为文件的起始位置

函数声明:

void rewind ( FILE * stream ) ;

参数:

指向标识流的FILE对象的指针

返回值:

使用示例:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{	FILE* pf = fopen("123456.txt", "w+");char arr[100];fputs("fufu is very cute!", pf);rewind(pf);fgets(arr,sizeof(arr)/sizeof(arr[0]), pf);printf("%s",arr);fclose(pf);return 0;
}

五、判定文件读取结束的标准与读写文件中途发生错误的解决办法

5.1 判定文件读取结束的标准

如何判断文件读取结束?其实是一个很简单的问题。

一般来说,我们使用的有关文件读取的函数,对于文本文件,如果它的返回值是EOF(例如fgetc),或者NULL(例如fgets),则代表文件内容读取结束。

而如果是二进制文件,则是看返回值是否小于实际要读取的个数(例如fread)

5.2 函数ferror与feof

但有些时候,文件会因为各种各样的代码问题导致文件中途读写失败,如何得知哪个函数出现问题,又如何判断文件是否因为到达文件尾而读取结束?接下来我们介绍两个函数,它们可以解决我们的疑问。

5.2.1 函数ferror

函数声明:

int ferror( FILE* stream );

函数参数:

指向标识流FILE对象的指针

返回值:

如果设置了与流关联的错误指示器,则返回非零值,否则返回0

解释:

在上篇文章与这篇文章中我们介绍的函数,绝大多数遇到错误,都会设置错误指示器,如果在每一个有关文件读写的函数后面都加一个if利用ferror进行判断,就可以知道在哪里出了问题。

例:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{FILE* pf;pf = fopen("myfile.txt", "r+");//注释if (pf == NULL) perror("Error opening file");else {char a=fgetc(pf);if (ferror(pf)) {printf("Error Reading to myfile.txt\n");exit(3);}fputc('x', pf);if (ferror(pf)) {printf("Error Writing to myfile.txt\n");exit(2);}          fclose(pf);}return 0;
}

 我们先将代码复制到工程中,然后在工程文件的目录下创建名为“myfile”的txt类型文件,并输入如下内容:

1.如果将注释一行的“r+”更改为“r”,运行程序,结果为:

2. 如果将注释一行的“r+”更改为“w”,运行程序,结果为:

根据ferror函数与运行结果, 我们就可以锁定问题出现在文件的读写方式上。

3. 如果不进行更改,运行程序,结果为:

5.2.2 函数feof 

函数声明:

int feof ( FILE* stream);

参数:

指向标识流的FILE对象的指针

返回值:

如果设置了与流关联的文件结束指示器,则返回非零值,否则,返回0

解释:

如果正常到达文件末尾而结束读取,则会返回非0值,如果未到达文件末尾而结束读取,则会返回0,用于检查程序是否读取完整。

注意:

feof是用于判断文件读取结束的原因是否是到达文件末尾,千万不可在文件读取过程中使用feof!

例:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>int main ()
{FILE * pFile;int n = 0;pFile = fopen ("myfile.txt","rb");if (pFile==NULL) perror ("Error opening file");else{while (fgetc(pFile) != EOF) {++n;}if (feof(pFile)) {puts ("End-of-File reached.");printf ("Total number of bytes read: %d\n", n);}else puts ("End-of-File was not reached.");fclose (pFile);}return 0;
}

此代码作用为:

打开名为“myfile.txt”的文件,并通过逐个读取所有字符来计算文件的字节数。该程序检查是否已到达文件末尾,如果已到达,则打印读取的总字节数。

小伙伴们可以自己试一下,我这里就不演示了。

本文完!

http://www.yayakq.cn/news/839872/

相关文章:

  • 网站建设经济可行性分析北京抖音代运营公司
  • 那种网站2021c2c平台的具体购物流程
  • 贺州市八步区建设局网站学校网页设计模板html代码免费
  • wordpress微商城插件app排名优化
  • 摄影师 网站 模板昆明旅游网页设计
  • 有什么教做维c甜品的网站python不会的题去哪搜
  • 强的网站建设公司排名建筑工程网5177517
  • 做网站的公司应该做收录嘛塘厦网站仿做
  • o2o网站建设行情做网站的规范尺寸
  • 用齐博cms建网站网站定制要花多少钱
  • 程序员 修电脑 做网站wordpress设置首主导航
  • 手机网站经典案例个人网站名可以和别人一样吗
  • 做开锁推广什么网站好wordpress用户邀请注册
  • 做网站犯法吗主机做网站工具
  • 网站怎么上传到空间手机文章网站源码
  • 江都微信网站建设深圳制作网页公司
  • 怎么用asp.net做网站城建网官网12319
  • 网站设计规划的目的和要求施工企业的施工现场消防安全责任人应是
  • 云南省住房和建设执业资格注册中心网站视觉中国网站建设公司
  • 网站制作语言有哪些东莞市建筑设计院
  • 农业企业网站建设流程网站怎么做的支付
  • 梅林固件做网站佛山网站建设公司如何组建
  • 贵阳东方蜜蜂网站建设广州网站开发人
  • 网站制作中需要注意的地方html商品展示页面
  • 网站打不开网址显示无法访问wordpress上传视频教程
  • 网站建设后需要维护吗九度互联网站推广公司
  • 做期货都看那些网站wordpress系统
  • 专业微网站电话号码上海网络推广竞价公司
  • 公司网站如何做二维码网站优化的价值
  • 怀化网站建设设计刚察县wap网站建设公司