• c语言 文件操作


    c语言 文件操作

    FILE * 是文件指针类型

    stdio.h中,stdin stdout stderr 可以当做文件来用
    操作系统的三个管道
    stdin 标准输入 从控制台读
    stdout 标准输出
    stderr 错误输出

    打开文件
    FILE * file = fopen(“文件的路径”,“用于描述读写的mode”)
    返回的是文件指针 如果文件不存在 会得到NULL
    fopen(“c:\xxx\xxx\xx.txt”,“r”)

    mode说明
    r打开一个已有的文本文件,允许读取文件。
    w打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
    a打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
    r+打开一个文本文件,允许读写文件。
    w+打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
    a+打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式
    “rb”, “wb”, “ab”, “rb+”, “r+b”, “wb+”, “w+b”, “ab+”, “a+b”binary 操作

    文件操作:

    读一个字符

    int fgetc( FILE * fp ); fgetc() 函数从 fp 所指向的输入文件中读取一个字符。返回值是读取的字符,如果发生错误则返回 EOF,

    int getc( FILE *stream ); 宏方式

    读一行字符

    char *fgets(char s[], int size, FILE * stream); 读一行
    最多读size-1个字符 因为还有个’\0’
    如果真的读了一行 末尾的\n也会读进来
    和gets的区别: gets读一行 末尾的换行符会被替换为\0
    如果读到EOF(-1) 文件尾

    wchar_t *fgetws(wchar_t * restrict s, int n, FILE * restrict stream);
    如果处理非英文字符 比如中文等字符 wchar_t

    格式化读

    int fscanf(FILE * stream, char * format, addr1,addr2…);
    参考 scanf

    读或写的时候 指定读写的位置

    文件指针中有一个表示位置的值 随着读或写 值会变
    long int ftell(FILE *stream) 得到文件指针中存储的位置值

    feof(文件指针) 1 0 判断是否到了结尾

    int fseek(FILE *stream, long offset, int fromwhere);
    fromwhere:
    SEEK_SET: 文件开头
    SEEK_CUR: 当前位置
    SEEK_END: 文件结尾

    写一个字符

    int fputc( int c, FILE *fp );

    写多个字符

    fputs 参照 puts , fputs(str,stdout) 与 puts(str) 等价

    写格式化字符串

    fprintf(文件指针,格式化字符串,表达式列表)
    fprintf 参考printf

    读写二进制数据

    size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);

    size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);

    错误判断和处理

    ferror(文件指针) 判断有无错误

    clearerr(文件指针) 清除错误状态

    perror(“错误信息前缀”) 打印错误信息 使用stderr,打印的信息默认使用 提供的前缀

    刷出数据 关闭文件

    int fflush(FILE *stream)
    写文件的时候 先写到缓存中 当缓存满了的时候 再从缓存中一次性写入文件中 能提高写文件效率

    fclose(文件指针) 会自动flush

    #include 
    int main(int arg_count, char* arg_values[])
    {
        char * file_path = "lab.c";
        FILE * file = fopen(file_path,"r");
        if(file==NULL){
            perror("ERROR");
            return 1;
        }
        char arr[200];
        while( !feof(file) ){
            fscanf(file,"%*[^a-zA-Z]%[a-zA-Z]",arr);
            printf("%s",arr);
        }
        fclose(file);
    
        return 0;
    }
    如果文件不存在 会打印:
    ERROR: No such file or directory
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    参考:

    菜鸟教程

  • 相关阅读:
    JDK1.8新特性介绍+Lambda+函数接口+方法、构造方法和数组引用及Stream流
    马斯克又一壮举 发射420颗卫星组建互联网
    微信小程序(三)--- 视图与逻辑详解(导航相关,WXS脚本,页面事件,生命周期,自定义编译模式等)
    对于计算机等级考试的建议
    搜索引擎(大数据检索)论述[elasticsearch原理相关]
    页面测试包括哪些内容?方法和要点有哪些?
    C++ Buider 6.0 窗口Style对TrackRubberBand函数的影响
    面试经典sql(大数据):同时在线人数
    RocketMQ NameServer源码剖析
    基于SpringBoot的大学生体质测试管理系统
  • 原文地址:https://blog.csdn.net/linchunhua/article/details/127790433