文件

文件

注:本文为学习《C语言从入门到精通》时,对部分章节的总结

1、文件概述

文件:一组相关数据的有序集合。

所有文件都可以通过流进行输入、输出操作。与文本流和二进制流相对应,文件可以分为文本文件和二进制文件。

  1. 文本文件,也称为ASCⅡ文件。这种文件在保存时,每个字符对应一个字节,用于存放对应的ASCⅡ码
  2. 二进制文件,按二进制编码方式保存文件内容

文件可以从不同角度进行具体分类:

  1. 从用户角度(或所依附的介质)看,文件可分为普通文件和设备文件
    1. 普通文件:驻留在磁盘或其他外部介质上的一个有序数据集
    2. 设备文件:与主机相连的各种外部设备,把它们的输入、输出等同于对磁盘文件的读和写

b、按文件内容看,可以分为源文件、目标文件、可执行文件、头文件和数据文件

2、文件基本操作

文件的基本操作包括文件的打开和关闭。

2.1、文件指针

文件指针:一个指向文件有关信息的指针,这些信息包括文件名、状态和当前位置,它们保存在一个结构体中,C语言规定该类型为FILE型

typedef struct {
    short level;
    unsigned flags;
    char fd;
    unsigned char hold;
    short bsize;
    unsigned char *buffer;
    unsigned ar *curp;
    unsigned istemp;
    short token;
} FILE;

2.2、文件的打开

fopen函数用来打开一个文件,打开文件的操作就是创建一个流。fopen函数的原型在stdio.h中。

FILE *fp;

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

文件名:将要被打开文件的文件名

使用文件方式:

文件使用方式

含义

r(只读)

打开一个文本文件(要求存在),只允许读数据

w(只写)

打开(先清空)或建立一个文本文件,只允许写数据

a(追加)

打开一个文本文件,并在文件末尾写数据

rb(只读)

打开一个二进制文件),只允许读数据

wb(只写)

打开(先清空)或建立一个二进制文件,只允许写数据

ab(追加)

打开一个二进制文件,并在文件末尾写数据

r+(读写)

打开一个文本文件,允许读和写

w+(读写)

打开(先清空)或建立一个文本文件,允许读和写

a+(读写)

打开一个文本文件,允许读或在文件末追加数据

rb+(读写)

打开一个二进制文件,允许读和写

wb+(读写)

打开(先清空)或建立一个二进制文件,允许读和写

ab+(读写)

打开一个二进制文件,允许读或在文件末追加数据

使用fopen函数打开文件成功,返回一个有确定指向的FILE类型指针;若打开失败,返回NULL。通常打开失败原因:

  1. 指定的盘符或路径不存在
  2. 文件名中含有无效字符
  3. 以r模式打开一个不存在的文件

2.3、文件的关闭

文件使用完毕后,使用fclose函数关闭。

fclose(文件指针);

正常关闭文件操作时,fclose函数返回0,否则返回EOF。

程序结束之前应关闭所有文件,可以防止因为没有关闭文件而造成的数据流失。

3、文件的读写

3.1、fputc函数

int ch = fputc(int ch, FILE *fp);

该函数的作用是把一个字符写到磁盘文件中去。该文件必须以读或读写的方式打开。当函数遇到文件结束符,返回一个文件结束标志EOF。

3.2、fgetc函数

ch = fgetc(fp);

int fgetc(FILE *stream);

该函数的作用是把从指定的文件读入一个字符赋给ch。其中,ch是要输出的字符,fp是文件指针,函数输出成功,返回值就是输出的字符,失败,则返回EOF。

3.3、fputs函数

fputs(字符串, 文件指针);

int fputs(const char *str, FILE *stream);

该函数的作用是向指定的文件写入一个字符串。

3.4、fgets函数

fgets(字符数组名, n, 文件指针);

char *fgets(char *str, int n, FILE *stream);

该函数的作用是从指定的文件中读一个字符串到字符数组中。n表示所得到的字符串中字符的个数(包含“\0”)。

3.5、fprintf函数

ch = fprintf(文件类型指针, 格式字符串, 输出列表);

int fprintf(FILE *stream, const char *format, ...)

比如:fprintf(fp, “%d”, i);

该函数的作用是将变量i的值以“%d”的格式输出到fp指向的文件中。

如果成功,则返回写入的字符总数,否则返回一个负数。

3.6、fscanf函数

fscanf(文件类型指针, 格式字符串, 输入列表);

int fscanf(FILE *stream, const char *format, ...)

比如:fscanf(fp, “%d”, &i);

该函数的作用是读入fp所指向的文件中的i的值。

如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。

3.7、fread和fwrite函数

fread(buffer, size, count, fp);

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

该函数的作用是从fp所指向的文件中读入count次,每次读size字节,读入的信息存在buffer地址中。

fwrite(buffer, size, count, fp);

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

该函数的作用是将buffer地址开始的信息输出count次,每次写size字节到fp指向的文件中。+0.

4、文件的定位

4.1、fseek函数

fseek(文件指针, 位移量, 起始点);

int fseek(FILE *stream, long int offset, int whence)

该函数作用:移动文件内部的位置指针。

  1. 文件指针:指向被移动的文件
  2. 位移量:表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB时不会出错。当用常量表示位移量时,要求加后缀“L”
  3. 起始点:表示从何处开始计算位移量,规定的起始点有文件首、文件当前位置和文件尾3种

起始点

表示符号

数字表示

文件首

SEEK-SET

0

文件当前位置

SEEK-CUR

1

文件尾

SEEK-END

2

fseek(fp, -20L, 1); // 表示将位置指针从当前位置向后退20字节。

fseek函数一般用于二进制文件。在文本文件中由于要进行转换,往往计算的位置会出现错误。

4.2、rewind函数

void rewind(文件指针);

该函数的作用:使位置指针重新返回文件的开头,该函数没有返回值

4.3、ftell函数

long ftell(文件指针);

该函数作用:得到流式文件中的当前位置,用相对于文件开头的位移量来表示,当函数出错时,返回-1L。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值