学习笔记——C语言基本概念&文件——(13)

1、文件操作

1.1、文件概念

文件:实现数据存储的载体

1.2、文件的分类

按照数据的组织形式分类:

        1.字符文件/文本文件

        2.二进制文件

按照用途分类:

        1.系统文件

        2.库文件--标准库文件/非标准库文件(第三方库)

        3.用户文件

Linux下的文件分类:

        -: 普通文件
        d: 目录文件/文件夹
        s: 套接字文件
        p: 管道文件
        l(小写的 L): 链接文件
        c: 字符设备文件
        b: 块设备文件


1.3、文件操作相关的函数

函数:man1 一般是指令

           man2 一般是系统相关函数

           man3一般是C语言标准库函数

文件操作相关流程:
        1.打开文件--仅仅得到一个文件描述符

        2.写/读--用函数操作文件描述符

        3.关闭文件

1.3.1 打开文件

函数的头文件为:#include<stdio.h>

函数名:fopen

函数原型:FILE *fopen(const char *pathname, const char *mode);

形参:pathname:路径下的文件名

            mode:打开文件的模式

“r”:   只读的方式打开, 光标在文件开头, 文件不存在, 打开失败!
“r+”: 读写的方式打开, 光标在文件开头, 文件不存在, 打开失败!
“w”: 只写的方式打开, 光标在文件开头, 文件不存在, 创建并打开, 文件存在, 清空
写!
“w+”: 读写的方式打开, 光标在文件开头, 文件不存在, 创建并打开, 文件存在, 清
空写!
“a”: 追加写, 光标在文件末尾, 文件如果不存在, 创建并打开;
“a+”: 可读可写, 根据你第一次操作该文件来确定光标位置, 第一次如果是读,光标默认在文件开头,第一次如果是写,光标在文件末尾;

返回值:

成功返回,FILE*;类型的文件描述符

失败:NULL;

#include<stdio.h>
int main()
{
    FILE*fp=fopen("./1.txt","r+");
    if(fp==NULL)
    {
        printf("文件打开失败");
        return ;
    }
    return;
}

如果1.txt是存在的:打开成功,后续fp就代表1.txt这个文件

如果1.txt是不存在的:打开失败!

插入:perror--打印失败信息

头文件:#include<stdio.h>

函数原型:void perror(const char *s);

形参:s--提供一个字符串即可

功能:打印距离它最近的函数执行失败的原因;注意:这个离它最近的函数指的是从上到下的近。

1.3.2 关闭函数

头文件:#include<stdio.h>

函数原型:int fclose(FILE *stream);

形参:stream:用fopen打开文件得到的文件描述符

返回值:

        成功返回:0

        失败返回:-1

1.3.3 读和写函数

1单字符的读和写

        单字符的写:fputc

        头文件:#include<stdio.h>

        函数原型:int fputc(int c, FILE *stream);

        形参:c--传入char类型的单字符

        将字符c写到文件指针所指向的文件的当前写指针的位置

        stream--文件描述符

        返回值:

                成功:返回写入的单字符

                失败:返回-1

        单字符的读:fgetc

        头文件:#include<stdio.h>

        函数原型:int fgetc(FILE *stream);

        形参: stream-文件描述符
        返回值:
                成功: 读取到的单字符, 用 char 类型来承接;
                失败/读到文件末尾: -1

        插入: rewind: 光标偏移至文件开头
        void rewind(FILE *stream);
        stream: fopen 的返回值
        功能: 光标偏移至文件开头


2 字符串的读和写

        字符串的写:fputs

        函数原型:int fputs(const char *s, FILE *stream);
        形参: s: 要写入文件中的字符串的首地址
                        stream: fopen 的返回值;
        返回值: 成功返回一个非负数( 通常为 1) , 失败返回-1


        字符串的读: fgets
        函数原型:char *fgets(char *s, int size, FILE *stream);
        形参: s: 读取到的内容存放的位置的首地址;
                    size: 你要读多大! !
                    stream: fopen 的返回值;
                    返回值: 成功: char * -- 依旧是 s
                    失败: NULL

C语言默认打开的三个文件

标准输入文件描述符--stdin--对应键盘

标准输出文件描述符--stdout--对应屏幕

标准出错文件描述符--stderr--对应屏幕

3格式化的读和写

        格式化写入:fprintf

        fprintf(fopen(返回值),“原样输出+格式控制符”,输出列表)

        注意:fprintf(stdout,“hello\n”); == printf(“hello\n”);

        格式化读取:fscanf

        要求:fscanf从文件中读,要求格式和fprintf()写入时一模一样;

        这两个函数必须是配合使用的

举例说明:


    int a=10,b=20,c=30;
    fprintf(fp,”%d-%d-%d\n”,a,b,c);
    int x,y,z;
    fscanf(fp,”%d-%d-%d\n”,&x,&y,&z);

4 块读 块写(二进制,要配合使用)

块写:fwrite

函数原型:size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream);
形参:ptr:要写入的内容的首地址

        size:一次写多大

        nmemb:写几次

        stream:fopen的返回值;

        返回值:真正写入的次数

块读:fread

函数原型:size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);

形参:ptr:读取的内容存放的位置的首地址

        size:一次读多大

        nmemb:读几次

        stream:fopen的返回值;

        返回值:成功:真正读取的次数,

遇到文件末尾,返回0

光标偏移函数:fseek

头文件:#include<stdio.h>

函数原型:int fseek(FILE *stream, long offset,int whence);

形参:stream:文件描述符

offset:偏移量+往文件末尾方向-往文件开头方向

whence:相对位置

SEEK_SET 文件开头
SEEK_CUR 当前位置
SEEK_END 文件末尾
fseek(fp,0,SEEK_SET); == rewind(fp); 以文件开头为起始位置, 偏移 0 字节


ftell函数:计算光标当前位置举例文件开头的偏移量

函数原型:long ftell(FILE *stream);

形参:stream:文件描述符

返回值:光标当前位置举例文件开头的偏移量

程序中计算文件的大小

fessk(fp,0,SEEK_END);//光标达到文件末尾

long num=ftell(fp);//num就是文件大小

  • 25
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值