C语言——文件

文件操作

概念

文件是指存储在外存储器上(一般代指磁盘,也可以是U盘,移动硬盘等)的数据的集合。

文件操作体现在哪几个方面

        1.文件内容的读取

        2.文件内容的写入

        数据的读取和写入可被视为针对文件进行输入和输出的操作,此时数据就像水流一样从外存储器流向内存,或者从内存流向外存储器,所以系统 形象的称文件操作为文件流

        C语言程序对文件的操作采用“文件缓冲机制”。就是说在程序中对文件的数据读写并不是直接 操作文件中的数据,而是系统会为文件在内存中创建“文件缓冲区”,程序对文件的操作,其实是在 缓冲区进行的。

C语言——文件_第1张图片

文件的分类

根据数据的存储方式划分:

1. 文本文件(ASCII文件)

2. 二进制文件

文件标识

1. 文件系统中:路径+文件名,举例:d:/aaa/bbb.txt

2. C语言程序中:文件指针(文件类型指针)

语法:FILE *指针变量名文件操作的步骤:

        1. 打开文件

        2. 文件处理(读写文件)3. 关闭文件

文件的打开与关闭

文件打开,让系统为文件创建文件缓冲区;

函数名:

fopen

头文件:

#include

函数原型:

FILE* fopen(const char *path,const char *mode);

函数功能:

打开文件,并为文件创建缓冲区

函数参数:

        path:目标文件的路径        
        mode:文件打开的方式(读-r、写-w、读写-L)

返回值:        

        成功:返回文件指针 File*(缓冲区首地址)
        失败:返回NULL

文件关闭,文件使用完毕,一定要记得释放

函数名:

fclose

头文件:

#include

函数原型:

int fclose(FILE* fp);

函数功能:

关闭文件,释放缓冲区

函数参数:

fp:已经打开的文件指针

返回值:

成功:返回0
失败:返回EOF(-1)

eg:

/**
 * 文件的打开与关闭
 */
#include 

int main(int argc,char** argv)
{
    // 在命令行执行./a.out的时候,传递一个需要打开的目标文件的地址
    if(argc < 2)
    {
        printf("输入有误,请按照<%s 文件路径>格式输入\n",argv[0]);
        return -1;
    }
    
    // 根据提供的文件路径,打开文件,mode(r,w,rw)
    FILE* fp = fopen(argv[1],"r");

    // 校验文件是否读取成功
    if(!fp)
    {
        perror("文件打开失败!");
        return -1;
    }
    puts("文件打开成功!");

    // 关闭打开的文件
    int ret = fclose(fp);
    // 校验文件是否关闭成功(很多时候这一步会省略掉)
    if(ret == -1)
    {
        perror("文件关闭失败!");
        
        return -1;
    }
    puts("文件关闭成功!");

    return 0;
}

文件的读写

单字符读取

函数名:

fgets()

头文件:

#include

函数原型:

int fgets(File* fp);

函数功能:

从fp代表的文件中获取一个字符

函数参数:

        fp:我们需要操作的文件的描述

返回值:

        成功:返回读取到的字符

        失败:或者文件末尾,返回EOF(-1)

多字符读取

函数名:

fgets()

头文件:

#include

函数原型:

char *fgets(char *buf, int size, FILE *fp);

函数功能:

从fp代表的文件中获取size-1个字符,放置在buf代表的内存中

函数参数:

        buf:内存空间首地址用于存放读取的字节

        size:待读取的字符,实际读取size-1

        fp:已经打开的文件指针

返回值:
        成功:返回buf
        失败:文件末尾,返回NULL

单字符写入

函数名:

fputc()

头文件:

#include

函数原型:

int fputc(int c, FILE *fp);

函数功能:

向fp代表的文件中写入1个字符c

函数参数:

        c:待写入的字符

        fp:已经打开的文件指针

返回值:
        成功:返回c
        失败:返回EOF(-1)

多字符写入

函数名:

fputs()

头文件:

#include

函数原型:

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

函数功能:

向fp代表的文件中写入1个字符数组s

函数参数:

        s:待写入的字符数组(写入缓冲区)

        fp:已经打开的文件指针

返回值:
        成功:返回非负整数(> 0)
        失败:文件末尾,返回NULL

C语言——文件_第2张图片

判断文件结束

函数名:

feof(fp)

头文件:

#include

函数原型:

int feof(fp)

函数功能:

在读如指向的文件时判断是否遇到文件结束。

函数参数:
        fp:已打开的文件指针

返回值:

        成功:返回非负整数(>0)

        失败:返回EOE(-1)

数据块的读写(二进制)

fread

头文件:

#include

函数原型:

size_t fread(void *ptr,size_t size,size_t count,FILE* fp)

函数功能:

从fp代表的文件中以size为单位(一个数据块)读取count个存放在ptr内存中

函数参数:

        ptr:内存空间首地址,用于存放读取到数据(缓冲区)

        size:数据块大小,以byte为单位

        count:待读取的数据块的个数

        fp:已打开的文件指针

返回值:

        成功:返回实际写入的字节数

        失败:返回<0

fwrite

头文件:

#include

函数原型:

size_t fwrite(count void* ptr,size_t size,size_t count,FILE* fp)

函数功能:

向fp代表的文件中以size为一个数据块,写入count个数据块到fp

函数参数:

        ptr:内存空间首地址,用于存放待写入的数据(写入缓冲区)

        size:数据块大小,以byte为单位

        count:待写入的数据块个数

        fp:已打开的文件指针

返回值:

        成功:返回实际写入的字节数

        失败:返回<0

文件的随机读写

说明:C语言允许程序员在读写文件内容时,可在指定的位置上读写数据文件随机读写的核心操作: 文件位置指针的定位

文件位置指针的移动方法:

rewind

头文件:

#include

函数原型:

void rewind(FILE* fp);

函数功能:

将文件位置指针定位到文件开头

函数参数:

fp: 已经打开的文件指针

返回值:

fseek

头文件:

#include

函数原型:

int fseek(FILE *fp, long offset, int whence);

函数功能:

将文件位置指针定位到指定位置

函数参数:

        fp: 已经打开的文件指针

        offset: 相对于参考位置的偏移位置

        whence: 参考位置

        SEEK_SET 或 0 表示文件头

        SEEK_CUR 或 1 表示当前读写的位置SEEK_END 或 2 表示文件尾

返回值:

成功 :0

失败 : -1

ftell

头文件:

#include

函数原型:

long ftell(FILE *fp);

函数功能:

获取文件位置指针当前位置

函数参数:

fp: 已经打开的文件指针

返回值:

成功 :文件位置指针当前位置

失败 : -1

你可能感兴趣的:(c语言,开发语言)