初学:标准IO----文件操作

1.3文件操作

1.3.1打开文件

//头文件
    #include <stdio.h>
打开
FILE *fopen(const char *pathname, const char *mode);
//功能
    关联文件和流指针:内核去打开一个文件并产生一个流和它相关联
//返回值
    成功: 返回与文件相关联的流指针,
    失败:返回NULL,并设置错误码
//参数列表
    pathname:要打开的文件路径及名字
        //文件路径可以是绝对路径,也可以是相对路径;但不能用~(家目录)
    mode: 打开文件的方式(权限)
        "r"  以只读的方式打开文本文件,(流定位在文件开头)
        "r+" 以读写的方式打开文本文件,(流定位在文件开头)
        "w"  以只写的方式打开文本文件,文件不存在就创建,(文件存在就清空)
        "w+" 以读写的方式打开文本文件,文件不存在就创建,(文件存在就清空)
        "a"  以追加写的方式打开文本文件,文件不存在则创建,(文件存在则只能在末尾进行写入)
        "a+" 以追加写和可读的方式打开文本文件,文件不存在则创建,(文件存在则只能在末尾进行写入)
        // 当有b时,以二进制的方式打开文件:rd,r+b,wb,w+b(wb+),ab,a+b(ab+),

 

文件描述符产生文件流
FILE *fdopen(int fd, const char *mode);
//功能
    通过一个文件的文件描述符产生一个指向与该文件相关联的流指针。
//返回值
    成功: 返回文件的流指针,
    失败: 返回NULL,并设置错误码
//参数列表
    fd 文件的文件描述符
    mode: 打开该文件的方式(权限)
重定向
FILE *freopen(const char *pathname, const char *mode, FILE *stream);
//功能:
    打开一个文件,用已经存在的流和这个文件进行绑定
//返回值:
    成功: 返回文件的新流指针,
    失败: 返回NULL,并设置错误码
//参数列表:
    pathname:要打开的文件路径及名字
    mode: 打开文件的方式(权限)
    stream: 需要重新改变指向的流

1.3.2关闭文件

FILE *freopen(const char *pathname, const char *mode, FILE *stream);
//功能
    关闭文件流,并将与该文件流相关的缓冲区内容写入磁盘。
//返回值
    成功: 返回0,
    失败: 返回EOF,并设置错误码;(// EOF:宏定义,EOF == -1)
//参数列表
    stream: 需要关闭的流
/*
    同一文件可以打开两次,但只能关闭一次
    打开文件并不会去创建缓冲区,只有在真正读写的时候才会创建
    流只是操作自己的缓冲区,并不是直接操作文件
*/

1.3.3文件指针偏移

FILE *freopen(const char *pathname, const char *mode, FILE *stream);
//功能:
    改变文件内文件指针的定位
//返回值:
    成功:返回0,
    失败:返回-1
//参数列表:
    stream:要改变定位的流
    offset:偏移量(字节),正数表示往后偏移,负数表示往前偏移
    whence:文件指针初始点
        SEEK_SET:文件头
        SEEK_CUR:文件当前定位的位置
        SEEK_END:文件尾

1.3.4读写文件

按字节读写文件
"读" 

FILE *freopen(const char *pathname, const char *mode, FILE *stream);
//功能
    从已经打开的流里面读一个字节的内容,读了字符过后指针会移动(读下一个字符)
//返回值
    成功:返回读到的字节内容(ASCII值)
    到达文件结尾或失败: 返回EOf,并设置错误码
//参数列表
    stream:要读取字符的输入流。
​
 
int getc(FILE *stream);
//功能
    从指定的输入流中读取一个字符,并返回所读取的字符。
//返回值
     成功: 则返回所读取的字符的ASCII值,
     到达文件结尾或失败: 返回EOF,并设置错误码
//参数列表
     stream:要读取字符的输入流。
​
 int getchar(void);
//功能
    从标准输入流stdin中读取一个字符,
//返回值
    成功: 返回所读取的字符的ASCII值,
    到达文件结尾或失败:返回 EOF,并设置错误码
​

 int ungetc(int c, FILE *stream);
//功能
    将一个无符号字符推回到给定的输入流中。(这意味着从流中读取的下一个字符将是c)。
//返回值
     成功:返回将字符c转换为unsigned char的结果,
     到达文件结尾或失败:返回EOF,并设置错误码
//参数列表
    c:     要推回到流中的字符,(类型为int。通常是一个字符的ASCII值)
    stream:要操作的输入流。

"写"

int fputc(int c, FILE *stream);
//功能
    从已经打开的流里面写一个字符,写入字符过后指针会移动
//返回值
    成功:返回写入的字符(ASCII值)
    失败: 返回EOf,并设置错误码
//参数列表
    c:      要写入的字符(unsigned char 类型)      
    stream:要写入字符的文件流。
       

int putc(int c, FILE *stream);
//功能
    从已经打开的流里面写一个字符,写入字符过后指针会移动
//返回值
    成功:返回写入的字符(ASCII值)
    失败: 返回EOf,并设置错误码
//参数列表
    c:      要写入的字符(unsigned char 类型)      
    stream:要写入字符的文件流。
       
int putchar(int c);
//功能
    向标准输出流stdout中写入一个字符,并在后面追加一个换行符。
//返回值
    成功: 返回所读取的字符的ASCII值,
    到达文件结尾或失败:返回 EOF,并设置错误码
​
按行读写文件
"读"

char *fgets(char *s, int size, FILE *stream);
//功能
    从流里面读取一行内容
//返回值
    成功: 字符串存放的地址,
    到达文件结尾或失败: 返回NULL,并设置错误码
//参数列表
    s:     要存放字符串的缓冲区
    size:  要读多少个字节
    stream:要读的流
//注意:
/*
    fgets最多读size-1个字节的内容,
    如果读到了换行(\n),那么添加一个'\0'结束。如果size-1的位置还没有换行,那么直接添加'\0'结束
*/
​

char *gets(char *s);
//功能
    从标准输入中读取一串字符串
//返回值
     成功: 字符串存放的地址,
     到达文件结尾或失败: 返回NULL,并设置错误码
//参数列表
    s: 要存放字符串的缓冲区
/*
     gets() 不检查输入的字符串长度,容易导致缓冲区溢出,替代函数是fgets() 函数。
*/
"写"        

int fputs(const char *s, FILE *stream);
//功能
    往流里面写入一个字符串
//返回值
    成功: 返回非负数
    失败: 返回EOF,并设置错误码
//参数列表:
    s:     要写入的字符串所在的缓冲区
    stream:要写的流
​

int puts(const char *s);
//功能
    将字符串输出到标准输出流stdout,
//返回值
    成功:非负数,
    失败:EOF,并设置错误码
按格式(对象)读写文件
"读"

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
//功能:
    从流里面读n个对象的数据出来,每个对象占size个字节
//返回值:
    成功: 返回实际读取到的对象数,
    失败: 返回0,并设置错误码
//参数列表:
    ptr:   用于存放读取到的内容的缓冲区
    size:  每个对象的大小
    nmemb: 预计要读多少个对象
    stream:要读的流
//  size*nmemb 不准超过ptr的大小
        
 "写"

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
//功能:
    往流里面写入n个对象,每个对象size个字节
//返回值:
    成功: 返回实际写入的对象数,
    失败: 返回0,并设置错误码
//参数列表:
    ptr:存放要写入内容的缓冲区
    size:每个对象的大小
    nmemb:预计要写入的对象数
    stream:要写的流

  • 24
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值