文件操作函数的使用和区别
2017-08-06 19:13
260 查看
一、fopen 与 fclose 函数的使用fopen 函数用于打开一个文件函数定义:FILE *fopen(const char *filename, const char *mode);fopen 的返回值是一个文件指针,FILE 是在stdio.h中定义的结构体类型,封装了与文件相关的信息:struct _iobuf { char *_ptr; //文件输入的下一个位置 int _cnt; //当前缓冲区的相对位置 char *_base; //指基础位置(应该是文件的其始位置) int _flag; //文件标志 int _file; //文件的有效性验证 int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取 int _bufsiz; //文件的大小 char *_tmpfname; //临时文件名 }; typedef struct _iobuf FILE;以上就是库中FILE的成员内容。fopen有两个形参,filename表示文件的路径以及文件的名字;mode指文件的打开方式,如下:
表 文件操作类型 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 字符 含义 ──────────────────────────── "r" 打开文字文件只读 "w" 创建文字文件只写 "a" 增补, 如果文件不存在则创建一个 "r+" 打开一个文字文件读/写 "w+" 创建一个文字文件读/写 "a+" 打开或创建一个文件增补 "b" 二进制文件(可以和上面每一项合用) "t" 文这文件(默认项) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 如果要打开一个CCDOS子目录中, 文件名为CLIB的二进制文件, 可写成: fopen("c://ccdos//clib", "rb"); 如果成功的打开一个文件, fopen()函数返回文件指针, 否则返回空指针 (NULL)。由此可判断文件打开是否成功。
下面举一个例子:
#iclude<stdio.h> main() { FILE *fp; /*定义一个文件指针*/ int i; fp=fopen("CLIB", "rb"); /*打开当前目录名为CLIB的文件只读*/ if(fp==NULL) /*判断文件是否打开成功*/ puts("File open error");/*提示打开不成功*/ i=fclose(fp); /*关闭打开的文件*/ if(i==0) /*判断文件是否关闭成功*/ printf("O,K"); /*提示关闭成功*/ else puts("File close error");/*提示关闭不成功*/ }
这里用到了fclose函数,明显这是关闭文件的函数,定义为:int fclose(FILE *fp);
如果关闭成功返回0,否则返回非0值。
二、fgetc() 函数与 fputc()函数
fgetc()函数定义为: int fgetc(FILE *fp);
该函数是从一个只读或者读写方式打开的文件上读取字符;
读取成功返回该字符,若读取到文件末尾,则返回EOF;
fputc()函数定义为: int fputc(int c, FILE *fp);
该函数用于将一个字符写到一个文件上;
成功则返回字符c,这里说明一下int型的c只读取低八位,所以还是一个字符;如果写入失败,则返回EOF;
下面举个例子:从键盘输入一串字符,存到一个文件中
#include <stdio.h>#include <stdlib.h>int main(){FILE *fp;char ch;fp = fopen("./filetest.txt", "w");if (fp == NULL){perror("error");exit(EXIT_SUCCESS);}ch = getchar();while (ch != '\n'){fputc(ch, fp);ch = getchar();}fclose(fp);return 0;}
这里顺便提一下feof()函数,该函数定义为:int feof(FILE *fp);
用于检查是否到达文件的末尾,当文件指针指向EOF时,返回0值,否则返回非0值。
三、fgets() 函数与 gets()函数的比较,以及fputs() 函数与 puts()函数的比较
fgets()函数的定义为: char *fgets(char *s, int n, FILE *fp);
gets()函数的定义为: char *gets(char *s);
fgets()函数从fp所指向的文件中读取字符串并在字符串末尾添加'\0',然后存入s,最多读取n-1个字符,n的默认值是1024。当读取到回车换行符'\n',到达文件末尾EOF,或者读取满n-1个字符时,函数返回该字符串的首地址。所以读取的字符串会多出一个\n;因为出错时返回空指针NULL。
所以错误判断的代码可以这样写:
while (fgets(s, n, fp)){ ...;}
而不能使用:
while(!feof())
{
fgets();
...;
}
如果文件的末尾没有\n,那么可以使用下面一个判断,但是文件的末尾加入了\n那么第一次读取的是string\n\0;
,若是再使用fgets函数,那么读取到的string直接遇到EOF返回NULL,string的内容没有变。
gets函数没有限制读取的字符串的范围,所以可能会溢出造成错误,并且gets函数读取到回车键就结束,不会取到回车换行字符,所以相比于fgets函数长度小了一位。所以fgets函数读取的字符串可以进行这样的操作:
s[strlen(s) - 1] = '\0';覆盖掉\n字符。
fputs()函数定义为:int fputs(const char *s, FILE *fp);
用于将字符串写入文件中,字符串结束标志'\0'不写入,如果成功返回一个非负数,否则返回EOF;
puts()函数定义为:int puts(const char *string);
该函数等价于printf ("%s\n",s);注意puts向标准输出设备输出字符串并且自动换行即可。
四、scanf与fscanf 与 sscanf ; printf 与 fprintf 与 fwrite 函数的比较
scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。
定义为:int scanf(const char * restrict format,...);
在此不再赘述格式化输入的内容,详情可跳转至百度百科 int puts(const char *string) http://baike.baidu.com/link?url=TVLPtAEmlS5bihfOrl297TW8j1rBdXWNDoxDGYvhV3J4O7u-2mBwA3Qgz11eD-09rIesBlC0ux-AKeO56jNFjK 了解所有的格式化输入内容。
fscanf()函数定义为:int fscanf(FILE *fp, const char *format, ...);
用于按指定的格式从文件读取数据,第一个参数为文件指针,第二个参数为格式化控制参数。
fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。
sscanf()函数:利用它可以从字符串中取出整数、浮点数和字符串等等。它的使用方法简单,特别对于整数和浮点数来说。
1. 常见用法。char str[512] = {0};sscanf("123456 ", "%s", str);printf("str=%s\n", str);2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。sscanf("123456 ", "%4s", str);printf("str=%s\n", str);3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。sscanf("123456 abcdedf", "%[^ ]", str);printf("str=%s\n", str);4. 取仅包含指定字符集的字符串。1-9和小写字母sscanf("123456abcdedfBCDEF", "%[1-9a-z]", str);printf("str=%s\n", str);5. 取到指定字符集为止的字符串。遇到大写字母为止的字符串。sscanf("123456abcdedfBCDEF", "%[^A-Z]", str);printf("str=%s\n", str);fprintf()函数定义为:int fprintf(FILE *stream, const char *format, ...);主要功能是将指定的字符串以特定的格式打印到指定的文件中。返回值返回成功打印的字符个数,失败时返回一个负数。fwrite()函数定义为: size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);功能是将ptr指向的字符串中nmemb个size大小的数据写入到指向的文件中去,写入成功返回成功写入的个数(不是字符个数),失败则返回短的写入个数或者返回0。
相关文章推荐
- 文件操作:系统调用和C库函数的区别
- 文件共享和使用 dup 函数创建新描述符的区别
- Matlab使用函数解析之文件操作
- 使用C操作文件的两种方式及其区别
- linux下文件的读写操作、字符串的处理操作,多线程操作等相关函数使用说明
- 一般文件操作函数的使用示例
- 使用文件函数操作Memcache
- PHP操作文件的一些基本函数使用示例
- PHP操作文件的一些基本函数使用示例
- C/C++文件操作函数使用总结
- 使用文件操作函数实现简单的CP、cat、size功能及读取文件内容初始化结构体
- 使用Windows的SHFileOperation外壳函数实现文件操作
- 第八篇:文件共享和使用 dup 函数创建新描述符的区别
- 使用C语言操作文件的基本函数整理
- C语言学习6 :指针的定义,指针类型要合法,指针要初始化,指针做函数参数,数组和指针的通用性,指针+1所代表的空间,void * 指针,交换函数中的指针,数组和字符型指针区别,字符型指针的应用,使用指针完成字符操作函数
- 使用fwrite()函数和fprintf()函数输出数据到文件时的区别
- C语言文件操作函数——fopen和freopen的区别
- 操作 Wave 文件(11): 使用 waveIn...函数录制 wav 文件
- 使用linux c 目录操作函数,读取任一目录下的所有目录信息文件信息
- 使用FILE文件指针进行文件的操作相关函数