【C 语言】文件操作 ( fopen 文件打开方式详解 )(二)

简介: 【C 语言】文件操作 ( fopen 文件打开方式详解 )(二)

类似于 r , 凡是与 r 相关的 , 文件必须存在 ;



代码示例 :


#include <stdio.h>
int main()
{
    // 以 rb+ 读写方式 打开 二进制文件
    FILE *p = fopen("D:\\a.txt", "rb+");
    if(p == NULL)
    {
        printf("File Open Failed !\n");
    }else
    {
        printf("File Open Success !\n");
        fputs("Hello\n", p);
        fputs("World\n", p);
        // 如果打开成功 , 则需要关闭文件
        fclose(p);
    }
    printf("Main End\n");
    return 0;
}



执行结果 : 使用文本查看工具输出


Hello
World


使用二进制查看工具 , 输出结果 : 其中 0x0A 指的是 ‘\n’ 字符 ;


48 65 6C 6C 6F 0A 57 6F 72 6C 64 0A






4、rb+ 与 r+ 对比


在上面使用 " rb+ " 的方式打开文件 , 是以二进制形式打开的文件 , 二进制输出内容为


48 65 6C 6C 6F 0A 57 6F 72 6C 64 0A


下面的代码中 , 使用 " r+ " 的方式打开文件 , 是以文本形式打开的文件 , 二进制输出内容为


48 65 6C 6C 6F 0D 0A 57 6F 72 6C 64 0D 0A


其中 0D 是 ‘\r’ , 0A 是 ‘\n’ , 文本形式中换行被解析为 “\r\n” , 二进制形式只有 ‘\n’ ;



在 Windows 系统下 , 文本都是以 “\r\n” 作为换行符号 ;


在 Linux / Unix 系统下 , 文本都是以 ‘\n’ 作为换行符号 ;



代码示例 :


#include <stdio.h>
int main()
{
    // 以 rb+ 读写方式 打开 二进制文件
    FILE *p = fopen("D:\\a.txt", "r+");
    if(p == NULL)
    {
        printf("File Open Failed !\n");
    }else
    {
        printf("File Open Success !\n");
        fputs("Hello\n", p);
        fputs("World\n", p);
        // 如果打开成功 , 则需要关闭文件
        fclose(p);
    }
    printf("Main End\n");
    return 0;
}




文本方式下 , 换行是 0D 0A , 二进制方式下 , 将数据原封不动输出 ;



在 Windows 下使用文本模式和二进制模式读写数据是不同的 ;


但在 Linux / Unix 下使用文本模式和二进制模式读写文件没有区别 ;




5、rw+


rw+ : 以读写方式打开文本文件 , 允许读写 ;


如果文件存在 , 则 文件打开成功 ;

如果文件不存在 , 返回的 FILE *p 为 NULL ;

写出时 , 将该文件原有数据覆盖 , 即文件长度清 0 00 , 删除文件内容 , 重新写入文件内容 ;


代码示例 :


#include <stdio.h>
int main()
{
    // 以 rw+ 读写方式 打开文件
    FILE *p = fopen("D:\\a.txt", "rw+");
    if(p == NULL)
    {
        printf("File Open Failed !\n");
    }else
    {
        printf("File Open Success !\n");
        fputs("Hello\n", p);
        fputs("World\n", p);
        // 如果打开成功 , 则需要关闭文件
        fclose(p);
    }
    printf("Main End\n");
    return 0;
}



如果文件存在 , 则文件打开成功 , 写出数据成功 , 写出时覆盖之前的内容 ;


image.png


如果文件不存在 , 则打开失败 ;


image.png



目录
相关文章
|
25天前
|
存储 自然语言处理 程序员
【C语言】文件的编译链接和预处理
【C语言】文件的编译链接和预处理
|
3天前
|
Linux C语言
C语言 文件IO (系统调用)
本文介绍了Linux系统调用中的文件I/O操作,包括文件描述符、`open`、`read`、`write`、`lseek`、`close`、`dup`、`dup2`等函数,以及如何获取文件属性信息(`stat`)、用户信息(`getpwuid`)和组信息(`getgrgid`)。此外还介绍了目录操作函数如`opendir`、`readdir`、`rewinddir`和`closedir`,并提供了相关示例代码。系统调用直接与内核交互,没有缓冲机制,效率相对较低,但实时性更高。
|
19天前
|
C语言
【C语言篇】文件操作(下篇)
因为有缓冲区的存在,C语⾔在操作⽂件的时候,需要做刷新缓冲区或者在⽂件操作结束的时候关闭⽂ 件。如果不做,可能导致读写⽂件的问题。
|
24天前
|
存储 C语言
【c语言】职工信息管理系统 包含读取写入txt文件,职工信息的增删改查
【c语言】职工信息管理系统 包含读取写入txt文件,职工信息的增删改查
|
15天前
|
存储 API 数据处理
C语言中的文件操作
C语言中的文件操作
62 0
|
19天前
|
C语言 索引
【C语言】文件操作全解速览
【C语言】文件操作全解速览
26 0
|
19天前
|
存储 程序员 C语言
【C语言篇】文件操作(上篇)
在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)。
|
25天前
|
存储 编译器 程序员
【C语言】文件操作讲解
【C语言】文件操作讲解
|
3月前
|
C语言
C语言进阶——sprintf与sscanf、文件的随机读写(fseek、ftell、rewind)
C语言进阶——sprintf与sscanf、文件的随机读写(fseek、ftell、rewind)
17 0
|
存储 缓存 C语言
【C语言进阶】文件的顺序读写、随机读写、文本文件和二进制文件、文件读取结束的判定以及文件缓冲区相关知识(下)
【C语言进阶】文件的顺序读写、随机读写、文本文件和二进制文件、文件读取结束的判定以及文件缓冲区相关知识(下)