C讲课笔记:文件

举报
howard2005 发表于 2021/11/19 01:53:04 2021/11/19
【摘要】 文章目录 一、文件打开与关闭(一)概述(二)文件打开函数 - fopen()1、调用格式2、参数与返回值说明3、文件使用方式 (二)文件关闭函数 - fclose()1、调用格式2、参数说明...

本次我们准备学习C语言中的文件操作。内存里的数据要持久保存,那么就必然会涉及到文件的读写操作。这也是C语言学习中比较重要的一部分内容,希望大家理解并掌握。

一、文件打开与关闭

(一)概述

文件在进行读写操作之前要先打开,使用完毕要关闭。所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其它操作。关闭文件则断开指针与文件之间的联系,也就禁止再对该文件进行操作。在C语言中,文件操作都是由库函数来完成的。

(二)文件打开函数 - fopen()

1、调用格式

文件指针名 = fopen(文件名, 使用文件方式);

2、参数与返回值说明

  • “文件指针名”必须是被说明为FILE 类型的指针变量
  • “文件名”是被打开文件的文件名
  • “使用文件方式”是指文件的类型和操作要求
  • “文件名”是字符串常量或字符串数组

FILE *fp;
fp = fopen("test.txt", "r");

  
 
  • 1
  • 2
  • 其意义是在当前目录下打开文件test.txt,只允许进行“读”操作,并使fp指向该文件。

FILE *fp;
fp = fopen("c:\\test.jpg", "rb")

  
 
  • 1
  • 2
  • 打开C盘根目录下文件test.jpg,只允许按二进制方式进行读操作。两个反斜线“\ ”中的第一个表示转义字符,第二个表示根目录。

3、文件使用方式

  • “rt”只读打开一个文本文件,只允许读数据
  • “wt”只写打开或建立一个文本文件,只允许写数据
  • “at”追加打开一个文本文件,并在文件末尾写数据
  • “rb”只读打开一个二进制文件,只允许读数据
  • “wb”只写打开或建立一个二进制文件,只允许写数据
  • “ab”追加打开一个二进制文件,并在文件末尾写数据
  • “rt+”读写打开一个文本文件,允许读和写
  • “wt+”读写打开或建立一个文本文件,允许读写
  • “at+”读写打开一个文本文件,允许读,或在文件末追加数据
  • “rb+”读写打开一个二进制文件,允许读和写
  • “wb+”读写打开或建立一个二进制文件,允许读和写
  • “ab+”读写打开一个二进制文件,允许读,或在文件末追加数据

  • 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。因此常用以下程序段打开文件:
if ((fp = fopen("c:\\test.jpg", "rb") == NULL) {
    printf("error on open c:\\test.jpg file!");
    getch();
    exit(1);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 如果返回指针为空,表示不能打开C盘根目录下的test.jpg文件,则给出提示信息“error on open c:\test.jpg!”,下一行getch()的功能是从键盘输入一个字符,但不在屏幕上显示。该行作用是等待,只有当用户从键盘敲任一字符才继续执行后续语句。exit函数返回非零值表示有错误发生。

(二)文件关闭函数 - fclose()

1、调用格式

fclose(文件指针名);

2、参数说明

“文件指针名”必须是被说明为FILE 类型的指针变量。

二、文件读写函数

  1. 字符读写函数 :fgetc()和fputc()
  2. 字符串读写函数:fgets()和fputs()
  3. 数据块读写函数:fread()和fwrite()
  4. 格式化读写函数:fscanf()和fprintf()

三、案例演示

1、编写程序 - 演示文件读写.c

 /* 
 功能:演示文件读写
 作者:华卫
 日期:2013年12月3日
 */
#include <stdio.h>
#include <stdlib.h>
void main()
{
     FILE *fp;
     char c; 
 
     //1. 写文件
 
     // fopen("文件名","打开方式");  r--read, w--write, a--append
     fp = fopen("c:/love.txt", "a"); //以追加方式打开文件
 
     if(fp == NULL)
     {
          printf("文件无法打开!");
          exit(0);
     }
 
     // fgetc()--从文件里读取一个字符, fputc()--往文件里写入一个字符
 
     printf("输入字符串,以#结束:");
     c = getchar(); //从键盘上输入一个字符
     while (c != '#')
     {    
          fputc(c, fp); //将字符变量c的内容写入fp指向的文件"c:\love.txt"    
          c = getchar(); //继续从键盘上输入一个字符
     } 
     fputc('\n', fp); //每次输入完之后加一个换行符
 
     fclose(fp); //关闭文件     
 
     /
 
     //2. 读文件
 
     fp = fopen("c:/love.txt", "r");
 
     if(fp == NULL)
     {
          printf("文件无法打开!");
          exit(0);
     }
 
     while(!feof(fp))
     {
          c = fgetc(fp); //从文件里读取一个字符
          putchar(c); //把这个字符显示在屏幕上
     }
 
     fclose(fp); //关闭文件 
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

2、运行程序,查看结果

  • 第一次运行,查看结果
    在这里插入图片描述
  • 第二次运行,查看结果
    在这里插入图片描述
  • 说明:因为写文件采用的是追加方式,所以文件c:\love.txt里最后会有两次次输入的内容。

四、课后作业

任务:将C盘Windows目录下的win.ini文件复制到D盘根目录,同时在控制台输出该文件内容。

文章来源: howard2005.blog.csdn.net,作者:howard2005,版权归原作者所有,如需转载,请联系作者。

原文链接:howard2005.blog.csdn.net/article/details/112599133

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。