C语言中没有输入输出语句,所有的输入输出功能都用 ANSI C提供的一组标准库函数来实现。文件操作标准库函数有:

文件的打开操作: fopen 打开一个文件

文件的关闭操作 : fclose 关闭一个文件

文件的读写操作 : fgetc 从文件中读取一个字符

fputc 写一个字符到文件中去

fgets 从文件中读取一个字符串

fputs 写一个字符串到文件中去

fprintf 往文件中写格式化数据

fscanf 格式化读取文件中数据

fread 以二进制形式读取文件中的数据

fwrite 以二进制形式写数据到文件中去

getw 以二进制形式读取一个整数

putw 以二进制形式存贮一个整数

文件状态检查函数 fEOF 文件结束:

ferror 文件读/写出错

clearerr 清除文件错误标志

ftell 了解文件指针的当前位置

文件定位函数 rewind 反绕:

fseek 随机定位

下面详细讲解一下各个函数的用法:

1、fopen、fclose

fopen

函数原型: FILE * fopen(const char * path, const char * mode)

参数path字符串包含将要打开的文件路径及文件名,参数mode字符串则代表着流形态。

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

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

上述的形态字符串都可以再加一个 b 字符,如 rb、w+b 或 ab+ 等组合,加入 b 字符用来告诉函数库以二进制模式打开文件。如果不加 b,表示默认加了 t,即 rt、wt,其中 t 表示以 文本模式 打开文件。

fclose

函数原型:int fclose( FILE *fp )

如果流成功关闭,fclose 返回 0,否则返回EOF(-1)

可以在fclose(fp)后使用

来判断是否成功关闭文件,关闭失败,则fclose返回1并输出错误原因

函数应用实例:

现在我们来看一个简单的实例例子:

#include <;

int main(){

int a;

int c=111;

int b;

char ch;

char buf[255];

char buff[255];

FILE *p;

//文件写入

p=fopen(";,"a");

// fputc('\n',p); //将字符写入到p指向的输入流

// fprintf(p,"this is point!\n"); //将字符串写入缓冲区

// fputs("this is fputs...\n",p); //将字符串写入到p指向的输入流,成功返回非负值,失败返回EOF

c=fclose(p); //将缓冲区数据写入文件,并关闭文件文件释放缓冲区

//文件读取

p=fopen(";,"r");

//方法一

// while((ch=fgetc(p))!=EOF){

// fputc(ch,stdout); //将ch表示的字符送到标准输出流中去

// }

//方法二

fscanf(p,"%s",buf); //读取p输入流,并复制到buf,遇到空格或换行结束

printf("fscanf:%s\n",buf);

//移动文件指针

// int len;

// len=ftell(p); //获得文件指针偏移量

// rewind(p); //移动文件指针到文件头

// fseek(p,2L,0); //移动文件指针(文件指针,偏移量长整型有正负值,0表示文件头1表示当前位置2表示文件尾)

// printf("%d",len);

//方法三

fgets(buff,5,p); //从p指向的输入流中获取n-1个字符,遇到换行符就停止读取,将读取的字符串复制到缓冲区buff包括换行符

int i=0;

printf("buff:%s\n",buff);

// printf("buff:");

// while(*(buff+i)!='\0'){ //*(buff+i)==buff[i],编译器自动给字符数组末尾加上'\0'结束符

// printf("%c",buff[i]);

// i++;

// }

c=fclose(p);

fputs("fputs:ok\n",stdout);

fprintf(stdout,"fprintf:no\n");

printf("a=%d\n",a);

printf("b=%d\n",b);

printf("c=%d\n",c);

return 0;

}

fgetc

函数原型: int fgetc(FILE *fp)

从文件指针fp指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节。这个函数的返回值,是返回所读取的一个字节。如果读到文件末尾或者读取出错时返回EOF。

注意到虽然是返回一个字节,但是返回值类型为int而不知unsigned char,因为EOF为-1,返回值要能够表示-1。

fputc

函数原型:int fputc (int c, FILE *fp)

c是一个整型变量,是内存要写到文件中的字符(C语言中整型量和字符量可以通用)

在正常调用情况下,函数返回写入文件的字符的ASC||码值,出错时,返回EOF。当正确写入一个字符或一个字节的数据后,文件内部写指针会自动后移一个字节的位置。

函数应用实例:将一个文件中的大写字母转为小写字母,小写字母转为大写字母后保存到另一个文件中

  1. #include<;
  2. int main()
  3. {
  4. char ch;
  5. FILE *fp1,*fp2;
  6. fp1 = fopen("a.txt","r");
  7. if(fp1 == NULL)
  8. return -1;
  9. fp2 = fopen("b.txt","w");
  10. if(fp2 == NULL)
  11. return -1;
  12. ch = fgetc(fp1);
  13. while(ch != EOF)
  14. {
  15. if(ch >= 'a' && ch <= 'z')
  16. ch -= 32;
  17. else if(ch >= 'A' && ch <= 'Z')
  18. ch += 32;
  19. fputc(ch,fp2);
  20. ch = fgetc(fp1);
  21. }
  22. fclose(fp1);
  23. fp1 = NULL;
  24. fclose(fp2);
  25. fp2 = NULL;
  26. return 0;
  27. }

3、fgets、fputs

函数应用实例:测试fgets

  1. #include<;
  2. int main(int argc,char **argv)
  3. {
  4. FILE *fp1;
  5. char str[256];
  6. fp1 = fopen("a.txt","r");中的内容是ABCabc123
  7. if(fp1 == NULL)
  8. return -1;
  9. if(fgets(str,4,fp1) == NULL)//这里调用fgets一次,读取出3个字符
  10. printf("失败");
  11. else
  12. printf("%s\n",str);
  13. if(fgets(str,7,fp1) == NULL)//这里第二次调用fgets,读取出剩下的6个字符
  14. {
  15. printf("失败");
  16. }
  17. else
  18. printf("%s\n",str);
  19. if(fgets(str,2,fp1) == NULL)//由于文件已经读取完毕,因此返回NULL
  20. printf("失败");
  21. else
  22. printf("%s",str);
  23. return 0;
  24. }

函数应用实例:将一个文件中的内容复制到另一个文件

  1. #include<;
  2. int main(int argc,char **argv)
  3. {
  4. FILE *fp1,*fp2;
  5. char str[256];
  6. fp1 = fopen("a.txt","r");中的内容是ABCabc123
  7. fp2 = fopen("b.txt","w");为空
  8. if(fp1 == NULL)
  9. return -1;
  10. if(fp2 == NULL)
  11. return -1;
  12. if(fgets(str,4,fp1) == NULL)//这里调用fgets一次,读取出3个字符
  13. printf("失败");
  14. else
  15. fputs(str,fp2);
  16. if(fgets(str,7,fp1) == NULL)//这里第二次调用fgets,读取出剩下的6个字符
  17. printf("失败");
  18. else
  19. fputs(str,fp2);
  20. if(fgets(str,2,fp1) == NULL)//由于文件已经读取完毕,因此返回NULL
  21. printf("失败");
  22. else
  23. fputs(str,fp2);
  24. return 0;
  25. }

结束语

好了,今天的知识就分享到这里,欢迎关注“怀念感觉12”,私信关键词:学习资料,获取更多学习资源,如果文章对你有有帮助,请收藏关注,在今后与你分享更多学习c/c++的文章。同时欢迎在下面评论区留言如何学习c/c++。

1.《c如何以文件路径,如何查找文件路径》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《c如何以文件路径,如何查找文件路径》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3242611.html