提前认识软件开拓(18) C语言中常用的文件操纵函数总结及利用要领
当前位置:以往代写 > C/C++ 教程 >提前认识软件开拓(18) C语言中常用的文件操纵函数总结及利用要领
2019-06-13

提前认识软件开拓(18) C语言中常用的文件操纵函数总结及利用要领

提前认识软件开拓(18) C语言中常用的文件操纵函数总结及利用要领

副标题#e#

在C语言中,有关文件操纵的函数多达数十种,但并非每个函数都常常会被用到。

本文对实际软件开拓项目中常用的C文件操纵函数的用法举办了总结,并用实际的C代码来演示了它们的用法。

1. C语言中常用的文件操纵函数总结

(1) fopen

浸染:打开文件。

表头文件:#include <stdio.h>

界说函数:FILE *fopen(const char *path, const char *mode);

函数说明:参数path字符串包括欲打开的文件路径及文件名,参数mode字符串则代表着流形态。

mode有下列几种形态字符串:

r:打开只读文件,该文件必需存在。

r+:打开可读写的文件,该文件必需存在。

w:打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则成立该文件。

w+:打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则成立该文件。

a:以附加的方法打开只写文件。若文件不存在,则会成立该文件,假如文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保存。

a+:以附加方法打开可读写的文件。若文件不存在,则会成立该文件,假如文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保存。

上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,插手b字符用来汇报函数库打开的文件为二进制文件,而非纯文字文件。不外在POSIX系统,包括Linux城市忽略该字符。由fopen()所成立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。

返回值:文件顺利打开后,指向该流的文件指针就会被返回。假如文件打开失败,则返回NULL,并把错误代码存在errno中。

附加说明:一般而言,打开文件后会作一些文件读取或写入的行动,若打开文件失败,接下来的读写行动也无法顺利举办,所以在fopen()后请作错误判定及处理惩罚。

(2) fclose

浸染:封锁文件

表头文件:#include <stdio.h>

界说函数:int fclose(FILE *stream);

函数说明:fclose()用来封锁先前fopen()打开的文件。此行动会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。

返回值:若封锁文件行动乐成则返回0,有错误产生时则返回EOF并把错误代码存到errno中。

错误代码:EBADF暗示参数stream非已打开的文件。

(3) fgetc

浸染:由文件中读取一个字符。

表头文件:include <stdio.h>

界说函数:int fgetc(FILE *stream);

函数说明:fgetc()从参数stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回EOF。

返回值:getc()会返回读取到的字符,若返回EOF则暗示到了文件尾。

(4) fgets

浸染:由文件中读取一字符串。

表头文件:include<stdio.h>

界说函数:char *fgets(char *s, int size, FILE *stream);

函数说明:fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到呈现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串竣事。

返回值:fgets()若乐成则返回s指针,返回NULL则暗示有错误产生。

(5) fflush

浸染:更新缓冲区。

表头文件:#include <stdio.h>

界说函数:int fflush(FILE *stream);

函数说明:fflush()会强迫将缓冲区内的数据写回参数stream指定的文件中。假如参数stream为NULL,fflush()会将所有打开的文件数据更新。

返回值:乐成返回0,失败返回EOF,错误代码存于errno中。

错误代码:EBADF参数stream指定的文件未被打开,或打开状态为只读。

(6) fputc

浸染:将一指定字符写入文件流中。

表头文件:#include <stdio.h>

界说函数:int fputc(int c, FILE *stream);

函数说明:fputc会将参数c转为unsigned char后写入参数stream指定的文件中。

返回值:fputc()会返回写入乐成的字符,即参数c。若返回EOF,则代表写入失败。


#p#副标题#e#

(7) fputs

浸染:将一指定的字符串写入文件内。

表头文件:#include <stdio.h>

界说函数:int fputs(const char *s, FILE *stream);

函数说明:fputs()用来将参数s所指的字符串写入到参数stream所指的文件内。

返回值:若乐成,则返回写入的字符个数,返回EOF则暗示有错误产生。

(8) fread

浸染:从文件流读取数据。

表头文件:#include <stdio.h>

界说函数:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

函数说明:fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来抉择。fread()会返回实际读取到的nmemb数目,假如此值比参数nmemb来得小,则代表大概读到了文件尾或有错误产生,这时必需用feof()或ferror()来抉择产生了什么环境。

返回值:返回实际读取到的nmemb数目。

(9) fseek

浸染:移动文件流的读写位置。

表头文件:#include <stdio.h>

界说函数:int fseek(FILE *stream, long offset, int whence);

函数说明:fseek()用来移动文件流的读写位置。参数stream为已打开的文件指针,参数offset为按照参数whence来移动读写位置的位移数。

参数whence为下列个中一种:

#p#分页标题#e#

SEEK_SET:从距文件开头offset位移量为新的读写位置,SEEK_CUR以今朝的读写位置往后增加offset个位移量,SEEK_END将读写位置指向文件尾后再增加offset个位移量。

当whence值为SEEK_CUR 或SEEK_END时,参数offset答允负值的呈现。

下列是较出格的利用方法:

1) 欲将读写位置移动到文件头时:fseek(FILE *stream, 0, SEEK_SET);

2) 欲将读写位置移动到文件尾时:fseek(FILE *stream, 0, SEEK_END);

返回值:当挪用乐成时,则返回0,若有错误,则返回-1,errno会存放错误代码。

附加说明:fseek()不像lseek()会返回读写位置,因此必需利用ftell()来取得今朝读写的位置。

(10) ftell

浸染:取得文件流的读取位置。

表头文件:#include <stdio.h>

界说函数:long ftell(FILE * stream);

函数说明:ftell()用来取得文件流今朝的读写位置,参数stream为已打开的文件指针。

返回值:当挪用乐成时则返回今朝的读写位置,若有错误则返回-1,errno会存放错误代码。

错误代码:EBADF 参数stream无效或可移动读写位置的文件流。

(11) fwrite

浸染:将数据写至文件流。

表头文件:#include <stdio.h>

界说函数:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

函数说明:fwrite()用来将数据写入文件流中。参数stream为已打开的文件指针,参数ptr指向欲写入的数据地点,总共写入的字符数以参数size*nmemb来抉择。fwrite()会返回实际写入的nmemb数目。

返回值:返回实际写入的nmemb数目。

(12) getc

浸染:由文件中读取一个字符。

表头文件:#include <stdio.h>

界说函数:int getc(FILE *stream);

函数说明:getc()用来从参数stream所指的文件中读取一个字符。若读到文件尾而无数据时,便返回EOF。固然getc()与fgetc()浸染沟通,但getc()为宏界说,非真正的函数挪用。

返回值:getc()会返回读取到的字符,若返回EOF则暗示到了文件尾。

(13) getchar

浸染:由尺度输入设备内读进一字符。

表头文件:#include <stdio.h>

界说函数:int getchar(void);

函数说明:getchar()用来从尺度输入设备中读取一个字符,然后将该字符从unsigned char转换成int后返回。

返回值:getchar()会返回读取到的字符,若返回EOF则暗示有错误产生。

附加说明:getchar()非真正函数,而是getc(stdin)宏界说。

#p#副标题#e#

(14) gets

浸染:由尺度输入设备内读进一字符串。

表头文件:#include <stdio.h>

界说函数:char *gets(char *s);

函数说明:gets()用来从尺度设备读入字符并存到参数s所指的内存空间,直到呈现换行字符或读到文件尾为止,最后加上NULL作为字符串竣事。

返回值:gets()若乐成则返回s指针,返回NULL则暗示有错误产生。

附加说明:由于gets()无法知道字符串s的巨细,必需碰着换行字符或文件尾才会竣事输入,因此容易造成缓冲溢出的安详性问题。发起利用fgets()代替。

(15) putc

浸染:将一指定字符写入文件中。

表头文件:#include <stdio.h>

界说函数:int putc(int c, FILE *stream);

函数说明:putc()会将参数c转为unsigned char后写入参数stream指定的文件中。固然putc()与fputc()浸染沟通,但putc()为宏界说,非真正的函数挪用。

返回值:putc()会返回写入乐成的字符,即参数c。若返回EOF则代表写入失败。

(16) putchar

浸染:将指定的字符写到尺度输出设备。

表头文件:#include <stdio.h>

界说函数:int putchar(int c);

函数说明:putchar()用来将参数c字符写到尺度输出设备。

返回值:putchar()会返回输出乐成的字符,即参数c。若返回EOF,则代表输出失败。

附加说明:putchar()非真正函数,而是putc(c, stdout)宏界说。

(17) feof

浸染:查抄文件流是否读到了文件尾。

表头文件:#include <stdio.h>

界说函数:int feof(FILE * stream);

函数说明:feof()用来侦测是否读取到了文件尾,尾数stream为fopen()所返回之文件指针。假如已到文件尾,则返回非零值,其他环境返回0。

返回值:返回非零值代表已达到文件尾。

(18) clearer

浸染:排除文件流的错误旗标。

表头文件:#include <stdio.h>

界说函数:void clearerr(FILE *stream);

函数说明:clearerr()排除参数stream指定的文件流所利用的错误旗标。

返回值:无。

#p#副标题#e#

2. C语言中常用的文件操纵函数的利用要领演示

#p#分页标题#e#

假设在当前工程目次下有一个有详细内容的文件Example.txt,则操作文件操纵函数对其举办各类操纵的演示如下代码所示(留意:假如要测试某一个或几个函数,只需要提取个中的部门代码即可):

*修改记录1://修改汗青记录,包罗修他日期、版本号、修改人及修改内容

*修他日期: 20140503

*版本号: V1.0

*修改人: Zhou Zhaoxiong

*修改内容:建设

**********************************************************************/

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

// 数据范例

typedef unsigned char UINT8;

typedef unsigned int UINT32;

/**********************************************************************

*成果描写:主函数

*输入参数:无

*输出参数:无

*返回值:0-执行乐成 1-执行失败

*其它说明:无

*修他日期 版本号 修改人 修改内容

* ----------------------------------------------------------------------------------------------

*20140503 V1.0 Zhou Zhaoxiong 建设

***********************************************************************/

UINT32 main(void)

{

FILE *fp = NULL;

UINT8 cSingleChar = '\0';

UINT8 szString[100] = {0};

UINT32 iFileDescription = 0;

UINT8 szAlphabeticSet[30] = {0};

UINT32 iLoopFlg = 0;

UINT32 iCharCount = 0;

UINT8 *pIdentify = NULL;

// fopen

fp = fopen("Example.txt", "r"); // 在当前工程目次下有一个有详细内容的文件Example.txt

if (fp == NULL)

{

printf("Open the file failed!\n");

return 1;

}

// fgetc

if ((cSingleChar = fgetc(fp)) != EOF)

{

printf("%c\n", cSingleChar);

fclose(fp); // 只读取第一个字符

}

else

{

printf("The file is empty!\n");

fclose(fp);

}

// fgets
//

    关键字:

在线提交作业