• fread和fwrite同时对一个文件读写


    这几天看到了fopen的参数设置。中文的那些真的是不能帮助精确理解。在网上发现了英文的,特附上:

    FILE *fopen(const char *filename, const char *mode)
    fopen opens the named file, and returns a stream, or NULL if the attempt fails. Legal values for mode include:
    "r"
    open text file for reading
    "w"
    create text file for writing; discard previous contents if any
    "a"
    append; open or create text file for writing at end of file
    "r+"
    open text file for update (i.e., reading and writing)
    "w+"
    create text file for update, discard previous contents if any
    "a+"
    append; open or create text file for update, writing at end
    Update mode permits reading and writing the same file; fflush or a file-positioning function must be called between a read and a write or vice versa. If the mode includes b after the initial letter, as in "rb" or "w+b", that indicates a binary file. Filenames are limited to FILENAME_MAX characters. At most FOPEN_MAX files may be open at once.

    其中+号表示可读可写,即上面的“更新模式”。

    对“更新模式”:可以同时读写,但是必须有清空缓冲区函数或者文件定位函数。意思是在读或写之间得调用文件定位的相关函数,比如fseek,rewind等等。

    经我测试确实是这样。

    int main()
    {
        FILE *fp = fopen("1.txt", "r+");
        char Rbuf[5], Wbuf[5] = "4321";
    
    
        fread(Rbuf, sizeof(char), 4, fp);
        Rbuf[4] = '';
    
        fseek(fp,ftell(fp),SEEK_SET);
        fwrite(Wbuf, sizeof(char), 4, fp);
        printf("%s
    ", Rbuf);
        
        fclose(fp);
    
        return 0;
    }

    只有这样,你才能在读之后接着写进去文件,或者rewind定位后重头部写进去。其他,都不行根本写不进去。具体原因我也不明白,用ftell测试后也发现对的,但是还是写不进去。只有这样可以,可能是什么内部实现吧。

    毕竟文件读写函数是封装之后的,还是按它的标准来。

  • 相关阅读:
    UWP开发必备:常用数据列表控件汇总比较
    CodeForces 372 A. Counting Kangaroos is Fun
    ubuntu 13.10 eclipse 菜单栏不可用的问题
    Codeforces Round #219(Div. 2)373 B. Making Sequences is Fun(二分+找规律)
    Git/Github使用方法小记
    Ubuntu 下jdk的安装
    VIM简明教程
    codeforces 371 C-Hamburgers
    codeforces 371A K-Periodic Array
    计算机网络中IP地址和MAC地址
  • 原文地址:https://www.cnblogs.com/wyc199288/p/5196574.html
Copyright © 2020-2023  润新知