C中的文件操作

       记得大一的时候,我们学校安排了C语言这门课,一开始,大家都很有兴趣,也很开心的在学习,这里面包括我,学习了前面几张,觉得理论知识可以了,但是向动手写几个小程序,发现,脑袋中没有那种写程序的思维,一团浆糊。然后就开始自暴自弃,课也没去上,书也不去看,再到后来。只求60万岁,多一分浪费,少一分累赘。现在想想以前的我,还是觉得太幼稚了,思想是那么的不成熟。不管自己曾经学得如何,我们不能放弃最初的目标。那就是把C学好。现在的我即将踏入嵌入式的工作旅途,处处都是用C,这个语言是多么的古老,但是也是多么的实用。而且,它可以直接操作硬件。这是其它语言无可比拟的。今天的这篇微博是我开通CSDN的开始,所以,我除了讲说下C的文件操作的常用的知识点外,文章里面还会包含我的一些感慨。希望各位读者可以见谅。

       开篇开始,本应该是从C的基础讲起,但是,经过一段时间的调查发现,很多学校的老师在C的教学上,都只是安排了前6章的居多。这个我其实倒是可以理解,毕竟课程的时间有限,另外一方面是C的后面几章会比较难以理解,学生学起来也不容易。而最后面这一张文件操作则是后面几章偏难中的比较简单的一章,只要稍微懂得定义指针。基本上看起来,和理解起来就不会那么难了。下面我把我的阅读笔记贴上来(精华笔记)。

1.fopen()函数
 原型:
 FILE *fopen(const char *filename,const char *mode);
 打开文件的模式有:
 (1)“r”打开文本文件进行【读】操作
 (2)“w”创建文本文件进行【写】操作
 (3)“a”向文本文件进行【读】【写】操作(如果文件不存在,则打开失败)
 (4)“r+”打开文本文件进行【读】【写】操作
 (5)“w+”创建文本文件进行【读】【写】操作,(如果之前存在,则清空)
 (6)“a+f”追加或创建文本文件进行【读】【写】操作
 (1)[rb]:打开二进制文件进行读操作
 (2)[wb]:创建二进制文件进行写操作
 (3)[ab]:向二进制文件追加数据
 (4)[r+b ]:打开二进制文件进行读/写操作
 (5)[w+b]:创建二进制文件进行读/写操作
 (6)[a+b ]:追加二进制文件进行读/写操作 例子:
 FILE *FP;
 if((fp=fopen("a.txt","r"))=NULL)
  printf("打开错误");
2.fclose()函数
 规定只能打开8个文件
 关闭文件可以释放系统资源,并且能降低超出允许打开的文件个数的风险,同时将清除所有相应的缓冲区
 原型:
 int fclose(FILE *fp);
 fcloseall()函数用于关闭所有打开的流
3.fputc()函数
 原型:
 int fputc(int ch,FILE *fp);
 例子:
 char ch;
 ch=getchar();
 if(fputc(ch,fp)==EOF)
  printf("写入失败");
4.fgetc()函数
 用于从使用fopen()以读的模式打开的文件中读取字符,fgetc()函数从输入流中当前位置返回下一个字符,并增加文件位置指示器若返回EOF,则表示达到文件末尾
 原型:
 int fgetc(FILE *fp);
 例子:
 ch=fgetc(fp);//从文件中读取字符
5.fputs()函数
 fputs()用于向磁盘文件写入字符串,fgets()用于从磁盘文件读取字符串
 fputs()函数将整个字符串写入指定的流中,返回EOF,表示写入错误
 fgets()函数从指定的流中读取一个字符串,直到读到一个换行符或者已经读了字符串长度减1个字符,返回的地址实际上就是str
 原型:
 int fputs(const char *str,FILE *fp);
 例子:
 int n=fputs("ww",FILE *fp);
6.fgets()函数
7.fread()函数
 fread()函数和fwrite()函数称为无格式读或写函数
 用于从文件读取或者向文件写入整块的数据,最有价值的一个应用是读写用户自定义的数据类型,尤其是结构体
 原型:
 size_t fread(void *buffer,size_t num_bytes,size_t count,FILE *fp);

说明

  (1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。

  (2)size:要读写的字节数;

  (3)count:要进行读写多少个size字节的数据项

(4)fp:文件型指针

 返回值是读取对象的数目,若返回0表示到达文件结尾或者出现错误
 例子:
 char str[30];
 struct stu
 {
  int age;
  char name[10];
 };
 int n=fread(str,sizeof(struct stu),5,fp);
8.fwrite()函数
 原型:
 size_t fwrite(void *buffer,sizie_t num_bytes,size_tcount,FILE *fp);
 返回值是写入文件的对象的数目,若该值小于count,说明有错误(没写完或者错误)
 char str[30];
 struct stu
 {
  int age;
  char name[10];
 };
 int n=fwrite(str,sizeof(struct stu),fp);
9.feof()函数
 如果到达文件末尾,函数feof()返回true,否则将返回false(0)
 在读取二进制数据时,使用该函数。
 使用feof()要注意,如果文件指针后面没数字了的话,它认为文件指针所指的下一个位置才是文件的末尾,并把前一个数字返回,所以最后一个数字会被读2次
 原型:
 int feof(FILE *fp);
 例子:
 while(!feof(fp))
 {
  char ch=fgetc(fp);
  printf("%c",ch);
 }
10.ferror()函数
 用于判断文件操作是否出错,由于每个操作都设置了出错条件,所以应在每个操作后立即调用ferror(),否则可能会遗漏错误
 原型:
 int ferror(FILE *FP);
 返回值为true,则表示操作时出错
11.rewind()函数
 将文件位置指示器置于文件开头,它将文件指针作为自己的参数,当文件以读写方式打开时,即可以读也可以写
 例子:
 rewind(fp);
12.remove()函数
 用于删除指定文件
 原型:
 int remove(char *filename);
 若删除成功则返回0,否则返回非0值。注意:要删除文件必须要fclose()文件之后才能删除。
 例子:
 if(remove("a.txt"))
  printf("删除失败\n");

上面这些都是我们在C中常用的有关文件的操作函数。可能在某些方面写得并不是很理想,毕竟这是基于我自身的理解,而且不能保证每个字都是敲的准确无误的。

上面的相关函数理解了,记住了,那么接下来,我们可以开始敲个小程序。

我们就在C盘创建一个a.txt,往里面随便写点什么,再打印在控制台。试一试,效果出来了么。欢迎批评指正哦

#include<stdio.h> 
main() 
{ 
	FILE *fp; 
	char ch = 'a',ch2; 
	int i = 3,i2; 
	char s[10] ;
	if((fp=fopen("c:\\a.txt","w+"))==NULL) //打开文件
	{ 
		printf("Cannot open file strike any key exit!"); 
		getch(); 
		exit(1); 
	} 
	fprintf( fp, "%s%c", "hello", ch );
	fprintf( fp, "%d\n", i );
	rewind(fp);//把文件指针返回到开始处
	fscanf( fp, "%s", s );
	fscanf( fp, "%c", &ch2 );
	fscanf( fp, "%d", &i2 );
	printf( "%s\n", s );   //这里已经把所有这一行的内容读完了,后面2句读不到东西。所以最后还是用结构体表示,并用fread读
	printf( "%c\n", ch2 );
	printf("%d\n",i2);
	fclose( fp );//用完文件指针后一定要记得关闭。
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值