快速了解文件操作

目录

一、文件操作

1.什么是文件

1.1程序文件

1.2数据文件 

 1.3文件名

2.文件的打开和关闭

2.1文件指针

 2.2文件的打开和关闭

 3.文件顺序读写

4.函数对比

5.文件的随机读写

5.1fseek

 5.2ftell

5.3rewind

6. 文本文件和二进制文件

 7.文件读取结束的判定

7.1feof使用

8.文件缓冲区


一、文件操作

1.什么是文件

磁盘上的文件是文件 。

一般文件分为两类:程序文件、数据文件(文件功能分)

1.1程序文件

源文件(后缀.c)、目标文件(windows环境 后缀 .obj)、可执行程序(windows环境   后缀.exe)

1.2数据文件 

 文件内容不一定是程序,而是程序运行时读写的数据

 1.3文件名

文件名包含3部分:文件路径+文件名主干+文件后缀

例如:c:\user\code\test.c 

文件标识常被称文件名

2.文件的打开和关闭

2.1文件指针

信息保存在一个结构体变量中,该结构体变量系统声明的,为FILE

 不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。

 2.2文件的打开和关闭

FILE *fopen(char *filename, char *mode);//文件打开
int *fclose(FILE *stream);//文件关闭 
打开方式说明
r以只读方式打开文件,只允许读取,不允许写入。该文件必须存在。
r+以读/写方式打开文件,允许读取和写入。该文件必须存在。
rb+以读/写方式打开一个二进制文件,允许读/写数据。
rt+以读/写方式打开一个文本文件,允许读和写。
w以只写方式打开文件,若文件存在则长度清为0,即该文件内容消失,若不存在则创建该文件。
w+以读/写方式打开文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a以追加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF符保留)。
a+以追加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的EOF符 不保留)。
wb以只写方式打开或新建一个二进制文件,只允许写数据。
wb+以读/写方式打开或建立一个二进制文件,允许读和写。
wt+以读/写方式打开或建立一个文本文件,允许读写。
at+以读/写方式打开一个文本文件,允许读或在文本末追加数据。
ab+以读/写方式打开一个二进制文件,允许读或在文件末追加数据。

 3.文件顺序读写

函数名适用于功能
fgetc所有输入流字符输入函数
fputc所有输出流字符输出函数
fgets所有输入流文本行输入函数
fputs所有输出流文本行输出函数
fscanf所有输入流格式化输入函数
fprintf所有输出流格式化输出函数
fread文件二进制输入
fwrite文件二进制输出

fgetc函数声明:int fgetc( FILE * fp );

fputc函数声明:int fputc( int c, FILE *fp );

fgets函数声明:char *fgets( char *buf, int n, FILE *fp );

fputs函数声明:int fputs( const char *s, FILE *fp );

fscanf函数声明:int fscanf(FILE *stream, const char *format, ...);

fprintf函数声明:int fprintf(FILE *stream, const char *format, ...);

4.函数对比

这里我们举出来的函数是fread和fwrite

实则每两对函数都是大体相仿的 

scanf 是针对标准输入的格式化输入语句

printf 是针对标准输入的格式化输出语句

fscanf 是针对所有输入流的格式化输入语句

fprintf 是针对所有输出流的格式化输出语句

sscanf 把一个格式化的数据写到字符串中

sprintf 把字符串转化成一个格式化数据

5.文件的随机读写

5.1fseek

可以随机将文件指针放到想要的位置

 int fseek (FILE * stream, long int offset , int origin );

使用例:

#include<stdio.h>
int main()
{
    FILE* pFile;
    pFile = fopen("example.txt", "wb");
    fputs("This is an apple.", pFile);
    fseek(pFile, 8, SEEK_SET);
    fputs(" sam", pFile);
    fclose(pFile);
    return 0;
}

运行结果:

 fseek还有其他的指向位置

指向
SEEK_SET文件的起始位置
SEEK_CUR文件当前指向的位置
SEEK_END文件末尾的位置

 5.2ftell

用于计算文件指针的偏移量

#include<stdio.h>
int main()
{
    FILE* pf;
    pf = fopen("contact.txt", "wb");
    fputs("abcdef", pf);
    fclose(pf);
    pf = NULL;
    pf = fopen("contact.txt", "rb");
    fseek(pf, 2, SEEK_SET);
    int ch = fgetc(pf);
    printf("%c\n", ch);
    printf("%d\n", ftell(pf));//3


    fseek(pf, -1, SEEK_END);
    ch = fgetc(pf);
    printf("%c\n", ch);
    printf("%d\n", ftell(pf));//6

    //fseek(pFile, 8, SEEK_SET);
    //fputs(" sam", pFile);
    fclose(pf);
    pf = NULL;
    return 0;
}

运行结果:

 

5.3rewind

 函数解释:将文件指针置回开头(用于文件指针找不到,或者想要文件从头开始)

#include<stdio.h>
int main()
{
    FILE* pf;
    pf = fopen("contact.txt", "wb");
    fputs("abcdef", pf);
    fclose(pf);
    pf = NULL;
    pf = fopen("contact.txt", "rb");
    fseek(pf, 2, SEEK_SET);
    int ch = fgetc(pf);
    printf("%c\n", ch);
    printf("%d\n", ftell(pf));//2


    fseek(pf, -1, SEEK_END);
    ch = fgetc(pf);
    printf("%c\n", ch);
    printf("%d\n", ftell(pf));//16

    //fseek(pFile, 8, SEEK_SET);
    //fputs(" sam", pFile);
    rewind(pf);
    ch = fgetc(pf);
    printf("%c\n", ch);//a   返回到了开始的a
    fclose(pf);
    pf = NULL;
    return 0;
}

运行结果:

 

6. 文本文件和二进制文件

文本文件:是以ASCll形式存储的

 二进制文件:是以二进制的形式存储的

使用例: 

#include<stdio.h>

int main()
{
    int a = 52013;
    FILE* pf = fopen("test.txt", "wb");
    fwrite(&a, 4, 1, pf);
    fclose(pf);
    pf = NULL;
    return 0;
}

 二进制文件存储:运行结果

 7.文件读取结束的判定

7.1feof使用

应用于当文件读取结束的时候,判断式读取失败结束,还是遇到文件尾结束

文本文件读取是否结束,判断返回值是否为EOF(fgetc),或者NULL(fgets)

feof判断:文件读取为NULL停止

ferror判断:文件读取错误停止

8.文件缓冲区

ANSIC标准采用“缓冲文件系统”处理的数据文件,内存数据向磁盘输出数据会先送到内存中的缓冲区

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值