C讲课笔记:文件

文章目录

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

一、文件打开与关闭

(一)概述

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

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

1、调用格式

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

2、参数与返回值说明

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

FILE *fp;
fp = fopen("test.txt", "r");
  • 其意义是在当前目录下打开文件test.txt,只允许进行“读”操作,并使fp指向该文件。

FILE *fp;
fp = fopen("c:\\test.jpg", "rb")
  • 打开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);
}
  • 如果返回指针为空,表示不能打开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); //关闭文件 
}

2、运行程序,查看结果

  • 第一次运行,查看结果
    C讲课笔记:文件
  • 第二次运行,查看结果
    C讲课笔记:文件
  • 说明:因为写文件采用的是追加方式,所以文件c:\love.txt里最后会有两次次输入的内容。

四、课后作业

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

上一篇:i春秋-百度杯”CTF比赛 2017 二月场-WEB-include


下一篇:Webots与VS仿真,报错Debug Assertion Failed!(关于文件文件写入程序)