文件操作函数的使用和区别
来源:互联网 发布:java迷宫小游戏设计 编辑:程序博客网 时间:2024/05/21 22:19
一、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。
阅读全文
0 0
- 文件操作函数的使用和区别
- 浅谈文件操作函数的使用与区别
- C文件操作函数fscanf和fprintf的使用
- 关于操作符和函数的区别
- C语言文件操作函数——fopen和freopen的区别
- 一般文件操作函数的使用示例
- 文件操作之fprintf函数的使用
- 使用VBA操作文件(2):处理文件的VBA函数和语句
- linux文件和目录的操作函数
- 文件操作和I/O流操作的区别
- (十五)文件操作——access函数的介绍和使用
- (十六)文件操作——chmod函数的介绍和使用
- 使用FILE文件指针进行文件的操作相关函数
- PYTHON文件操作和列表的使用
- 文件操作的函数
- 使用文件函数操作Memcache
- 文件操作的系统调用和库函数调用的区别
- 使用C操作文件的两种方式及其区别
- 5-5 堆栈操作合法性 (20分)
- Java语言概述
- C语言数据结构之链表篇
- 阿里云服务器配置开发环境第五章:Centos7.3切换为iptables防火墙
- Linux中使用cgroup来限制资源使用
- 文件操作函数的使用和区别
- “智能问诊”项目——机器学习(1)
- 阿里云服务器配置开发环境第七章:Centos7.3安装nginx以及环境配置
- UVA Live 7272 Promotions 拓扑排序
- 洛谷 P2688 大海战(二分+DP)
- 文件编程(一)
- MongDB介绍入门和使用
- 雷神笔记本安装ubantu、deepin后无法wifi上网
- php5.6之php-fpm优化