文件操作(流)

文件操作


打开流:

FI LE * fopen ( const char * filename, const char * mode );
第一个参数 文件名 第二个参数 方式

关闭流

int fclose ( FILE * stream );


截选自庖丁解牛

r代表read的简写,+代表可读可写,w代表write,b代表bit二进制位,t代表text


r 打开只读文件,该文件必须存在
r+ 打开可读可写的文件,该文件必须存在(这里的写文件是指将之前的文件覆盖
rt 打开只读文本文件,该文本必须存在
rt+ 读写打开一个文本文件,允许读和写,该文件必须存在(这里的写文件是指将之前的文件覆盖
rb 只读打开一个二进制文件,,该文本必须存在
rb+ 读写打开一个文本文件,允许读和写,该文件必须存在(这里的写文件是指将之前的文件覆盖


w 打开只写文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件
w+ 打开可读写文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件(这里的读文件,同样需要使用rewind()函数)
wt 打开只写文本文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件
wt+ 打开可读写文本文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件
wb 打开只写二进制文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件
wb+ 打开可读写文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件


a以附加的方式打开只写文件,若文件不存在,则建立文件,存在则在文件尾部添加数据,即追加内容
a+以附加的方式打开可读写文件,不存在则建立文件,存在则写入数据到文件尾(这里的读文件,同样需要使用rewind()函数,但是写文件不需要rewind()函数,a是追加)
at二进制数据的追加,不存在则创建,只能写。
at+读写打开一个文本文件,允许读或在文本末追加数据(这里的读文件,同样需要使用rewind()函数,但是写文件不需要rewind()函数,a是追加)
ab二进制数据的追加,不存在则创建,只能写。
ab+读写打开一个二进制文件,不存在则创建,允许读或在文本末追加数据(这里的读文件,同样需要使用rewind()函数,但是写文件不需要rewind()函数,a是追加)


文件

在 stdio.h 中定义了一个 FILE 结构。 (请不要把它和磁盘上的文件混淆。)
FILE 是一个数据结构,用于访问一个流。如果你激活了几个流,每个流都会对应一个 FILE 结构。
为了操作流程,你调用一些合适的函数,并向函数传递一个与这个流关联的FILE参数。对于每一个ANSI C程序而言,至少打开三个流:标准输入(stdin)、标准输出(stdout)、标准错误(stderr),他们都是一个指向FILE结构的指针


标准输入为:键盘设备
标准输出为:终端或屏幕。


I/O流

流被分为两种: 文本流 和 二进制流 。
文本流在不同的系统中实现不太相同。
二进制流中的字节完全是安装程序编写他们形式写入到文件和设备中。而且完全根据他们从文件或设备读取的形式读入到程序。


I/O常量

在 stdio.h 中定义了很多I/O常量
EOF -文件结束标志,表示文件到了结尾
FOPEN_MAX - 一个程序最多打开文件数。
FILENAME_MAX - 文件名的最大长度


IO函数

  1. 程序必须为同时处于活动状态的每个文件声明一个指针变量,其类型为: FILE* ,这个指针指向一个结构,当它处于活动状态时由流使用。
  2. 流通过fopen函数打开,打开流的时候,必须指定需要访问的文件或者设备已经访
    问的方式。fopen函数和操作系统去验证文件或者设备确实存在,验证访问方式,然后初始化FILE结构。
  3. 根据需要对文件进行读取和写入。
  4. 最后,fclose函数可以关闭流。关闭一个流可以防止与它相关的文件被再次访问,
    保证任何存储于缓冲区中的数据被正确的写入文件中。

这里写图片描述

以上函数的用法:https://blog.csdn.net/Romantic_C/article/details/79513139


错误报告函数

perror

void perror ( const char * str );
perror 以一种简单、统一的方式报告错误。ANSI C函数库的许多函数调用操作系统来完成某些任务,I/O函数尤其如此,当操作系统按照要求执行某些任务的时候就可能会失败,例如:尝试打开一个根本就不存在的文件,读取内容。操作系统的做法就是发生错误的时候,能够提示发生了错误。标准库函数提供了一个全局的变量errno (在errno.h中定义),来记录错误的错误码,交给用户程序,用于提示错误的准确原因。


如果perror函数的参数str指针不是NULL,并指向一个非空的字符串,perror函数先打印这个字符串,然后跟着输出一个分号和一个空格,接着输出错误信息提示。


int main()
{
    FILE* fp = fopen("1.txt", "r");
    if (fp == NULL)
    {
        perror("fopen error");
        return 1;
    }
    fclose(fp);
}

这里写图片描述


errno

errno这个值只有在调用库函数的时候发生问题了,才能会被设置。而函数调成功之后也不会修改,所以不能使用errno来判断一个函数是否执行成功。


exit

exit用于终止一个程序的执行。return是终止一个函数的执行



////////程序1
int fun1()
{
    system("pause");
    return 1;
}

int main()
{
    fun1();
    printf("ing...\n");
    return 0;
}


////////程序2
int fun2()
{
    exit(1);
}

int main()
{
    fun2();
    printf("ing...\n");
    return 0;
}

程序1打印ing… 程序2无输出

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值