C语言的IO

C语言的IO,第1张

C语言的IO

文件IO
    FILE* fopen(const char* path, const char* mode);

文件的分类:
    文本文件:存储人能看懂的文件,存储的是ASCII码的二进制'2''5''5' '2'-> 50 的二进制
    二进制文件:存储的是数据的二进制 255

功能:打开或者创建文件
    path:文件路径
    mode:打开模式
    r:    以只读权限打开文件,如果不存在则失败
    r+:    在r的基础上增加写权限
    w:    以只写权限打开文件,如果不存在则创建文件,如果文件已存在则清空打开
    w+:    在w的基础上增加读权限
    a:    以只写权限打开文件,如果文件不存在则新建,如果文件已存在则在文件末尾追加写入
    a+: 增加读权限,读取是在文件的开头,但输出是始终附加到文件的末尾
    注意:以上六种模式都是以文本文件模式 *** 作文件,在他们的基础上后面加b表示以二进制方式 *** 作文件
    返回值:结构指针,不需要关心他的成语

二进制方式读写:
    size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream);
    功能:把文件中的数据读取到内存中
    ptr:要读取的内存段的首地址
    size:每次读取多少字节
    nmemb:要读取多少次
    stream : 文件指针,要读取的文件,fopen的返回值
    返回值:成功读取的次数:

    size_t fwrite(const void* ptr, size_t size, size_t nmemb,FILE* stream);
    功能:把内存中的数据存入文件中
    ptr:要写入的内存段的首地址
    size:每次写入多少字节
    nmemb:要写入多少次
    stream:文件指针,要写入的文件,fopen的返回值
    返回值:成功写入的字节数
    perror(“(函数名)”);打印出跟 *** 作系统相关的错误
        
练习2:定义一个教师结构体变量并初始化,把该变量的值以二进制方式写入文件中
练习2:从文件中读取教师变量并显示
#include

typedef struct Teacher
    {
        char name[20];
        char sex;
        int id;
        int age;
    }Teacher;

    int main(int argc, const char* argv[])
    {
        Teacher tch = { "xm",'m',1234,30 };
        FILE* fwp = fopen("teacher.txt", "w");
        if (NULL == fwp)
        {
            perror("fopen");
            //printf("空指针!");
            return 1;
        }
        fwrite(&tch, 1, sizeof(tch), fwp);
    }

#include
typedef struct Teacher
    {
        char name[20];
        char sex;
        int id;
        int age;
    }Teacher;
    int main(int argc, const char* argv[])
    {
        Teacher tch;
        FILE* frp = fopen("teacher1.txt", "r");
        if (NULL == frp)
        {
            perror("fopen");
            return -1;
        }
        fread(&tch, sizeof(Teacher), 1, frp);
        printf(" %s %c %d %dn", tch.name, tch.sex, tch.id, tch.age);
    }


文本方式读写:

    int  fprintf(FILE* stream, const char* format,...);
    功能:以文本形式写入数据到文件中;
    stream:要写入的文件,文件指针
    format:“提示信息+占位符”
    ... :变量名列表
    返回值:成功写入的字符个数

    int fscanf(FILE* stream, const char* format, ...);
    功能:从文件中读取数据到变量里
    stream : 要读取的文件,文件指针
    format : “提示信息 + 占位符”
    ... : 变量地址列表
    返回值:成功读取到的变量个数
    
    练习3:定义一个教师结构体变量并初始化,把该变量的值以文本方式写入文件中
    练习4:从文件中以文本形式读取教师变量并显示

int fclose(FILE *stream)
    功能:关闭文件

文件的随机读写:
    文件的位置指针:
        每个打开的文件都有一个指针记录着读写 *** 作的位置,而且它会随着读写函数的执行而发生移动
        以r、r+、w、w+打开的文件位置指针在开头,以a、a+打开的文件位置指针在末尾
    如果想要随机读写文件的任意位置的数据,那么需要手动设置文件位置指针的位置
        
    int  fseek(FILE * stream, long offset, int whence);
    stream:文件指针
    offset:偏移值
    whence:基础位置
        SEEK_SET    文件开头
        SEEK_CUR    当前位置
        SEEK_END    文件末尾
    返回值:成功返回0;失败返回-1

    long ftell(FILE* stream);
    功能:获取当前文件位置指针的位置
    返回值:位置指针在第几个字节

    void rewind(FILE* stream);
    功能:把文件位置指针设置到开头

文件相关函数
    char* fgets(char* s, int size, FILE* stream);
    功能:从文件中读取一行字符串,到结束
    返回值:链式调用
    
    int fgetc(FILE * stream);
    功能:从文件中读取一个字符

    int fputs(const char* s, FILE * stream);
    功能:写入一个字符串到文件中

    int fputc(int c, FILE* stream);
    功能:写入一个字符到文件中

    int rename(const char* oldpath, const char* newpath);
    功能:重命名文件
    返回值:成功返回0,失败返回-1

    int remove(const char* pathname);
    功能:删除文件
    返回值:成功返回0,失败返回-1


main的参数:
    是为了获取运行时命令行附加的参数
        argc代表附加的参数的个数,包括./可执行文件名,也算参数
        argv代表每个命令行参数的字符串首地址

练习5:
    实现一个cp命令的功能,

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5670857.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存