博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C文件操作进阶
阅读量:7071 次
发布时间:2019-06-28

本文共 1520 字,大约阅读时间需要 5 分钟。

  文件操作基本步骤:首先使用fopen获得指向文件的指针,

 

1.fopen

  作用:打开一个文件,返回指向该文件的指针  

  函数原型:FILE * fopen(const char *path,cost char *mode)  

  参数说明:第一个参数为欲打开文件的文件路径及文件名,第二个参数表示对文件的打开方式

  返回值:文件打开了,返回一个指向该打开文件的指针(FILE结构);文件打开失败,错误上存error code(错误代码)

注:mode有以下值:

 

r:只读方式打开,文件必须存在

 

r+:可读写,必须存在

 

rb+:打开二进制文件,可以读写

 

rt+:打开文本文件,可读写

 

w:只写,文件存在则文件长度清0,文件不存在则建立该文件

 

w+:可读写,文件存在则首先将文件清空再写入,文件不存在则建立该文件

 

a:附加方式打开只写,不存在建立该文件,存在写入的数据加到文件尾,EOF符保留

 

a+:附加方式打开可读写,不存在建立该文件,存在写入的数据加到文件尾,EOF符不保留

 

wb:打开二进制文件,只写

 

wb+:打开或建立二进制文件,可读写

 

wt+:打开或建立文本文件,可读写

 

at+:打开文本文件,可读写,写的数据加在文本末尾

 

ab+:打开二进制文件,可读写,写的数据加在文件末尾

 

由mode字符可知,上述如r、w、a在其后都可以加一个b,表示以二进制形式打开文件

注意:在fopen操作后要进行判断,是否文件打开,文件真正打开了才能进行后面的读或写操作,如有错误要进行错误处理

例:FILE *fp=fopen("testfile","w+")

 

2.fwrite

  作用:向文件写入一个数据块

  函数原型:size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);

  参数说明:第一个参数为指向文件输出地址的指针,参数二表示写入的每个数据路块的字节数,参数三表示要写入size字节数据块的个数,参数四为指向目标文件的指针。  

  返回值:实际写入的数据块的个数。

说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。
fseek对此函数有作用,但是fwrite[1]函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE *fp)函数同步。
 

 3.fseek 

  作用:重定位文件内部指针

  函数原型:int fseek(FILE *stream,long offset,int framewhere)

  参数说明:第一个为文件指针,第二个是指针的偏移量,第三个是指针偏移起始位置

  返回值:成功则返回0,否则返回其他值

  偏移量的三种取值: SEEK_SET  文件头

            SEEK_CUR  当前指针位置

            SEEK_END  文件尾

 

4.fread

  作用:读取文件数据块(注意:文件读取后文件内指针会随之移动

 

 

 

 

 

memset

  函数原型:void *memset(void *s,int c,size_t n)

  作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。

 

sizeof

  作用:返回类型所占的字节数

 

转载于:https://www.cnblogs.com/2017Crown/p/7181407.html

你可能感兴趣的文章
高性能的MySQL(6)查询执行机制(上)
查看>>
shell脚本变量和字符串截取
查看>>
网络安全之DSSDSA算法
查看>>
序列化和反序列化的概念
查看>>
Windows服务器配置与管理------远程桌面管理
查看>>
Zeppelin的REST API接口
查看>>
DC/OS内核简介
查看>>
我的友情链接
查看>>
云端高手答疑解惑 助您开启智慧人生
查看>>
用Cronjob定时备份数据库并发送至邮箱
查看>>
智能DNS系统wddns 1.5发布同时提供免费智能解析
查看>>
互斥锁(排它锁、独占锁、写锁、X锁)和共享锁(读锁、S锁) 自旋锁
查看>>
InnoDB 引擎独立表空间 innodb_file_per_table 拆分ibdata
查看>>
Disabled form inputs do not appear in the request
查看>>
笔试题集锦
查看>>
求两个数中二进制位不同的个数
查看>>
Java使用JDBC方式连接数据库
查看>>
Android 定时器实现方式
查看>>
Android开发 - 设置DialogFragment全屏显示
查看>>
Linux的基础知识学习
查看>>