摘要:本文主要向大家介绍了C/C++知识点之C-fopen,fwrite,fread,fseek笔记,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了C/C++知识点之C-fopen,fwrite,fread,fseek笔记,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
所需库: <stdio.h>
返回值
FILE是C语言定义的标准数据结构,如果open()失败,则返回NULL
path
路径
mode
打开模式,包括有以下几种
r 以只读方式打开文件,该文件必须存在。
r+ 以读/写方式打开文件,该文件必须存在。
rb+ 以读/写方式打开一个二进制文件,只允许读/写数据。
rt+ 以读/写方式打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则长度清为 0,即该文件内容消失,若不存在则创建该文件。
w+ 打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF 符保留)。
a+ 以附加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的 EOF 符不保留)。
wb 以只写方式打开或新建一个二进制文件,只允许写数据。
wb+ 以读/写方式打开或建立一个二进制文件,允许读和写。
wt+ 以读/写方式打开或建立一个文本文件,允许读写。
at+ 以读/写方式打开一个文本文件,允许读或在文本末追加数据。
ab+ 以读/写方式打开一个二进制文件,允许读或在文件末追加数据。
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
返回值
fread()和fwrite()返回的是成功读取/写入的条目数(也就是nmemb大小),如果到达文件末尾或读写错误,则返回0
ptr
指针pointer,用来读出或写入的数据区
size
单个数据项的大小,单位为字节
nmemb
读写的条目数(实际等于读写字节大小 )
PS:尽量将size大小写为最小值(1字节)
int fclose(FILE *stream);
关闭流 stream,刷新缓冲区,更新文件
示例1:
复制代码
#include<string.h>
#include<stdio.h>
int main(void)
{
FILE *fp = NULL;
const char *buf = "0123456789";
fp = fopen("DUMMY.FIL","w");/*创建一个包含10个字节的文件*/
fwrite(buf,strlen(buf),1,fp);/*将buf内容写入到文件中*/
fclose(fp);/*关闭文件*/return 0;
}
复制代码
int fseek(FILE *stream, long offset, int fromwhere);
返回值
成功,返回0,失败返回-1,并设置error的值
offset
偏移量,正数表示正向偏移,负数表示负向偏移,单位为字节
Fromwhere
偏移起始位置,有3种位置:
SEEK_SET(0): 文件开头
SEEK_CUR(1): 当前位置
SEEK_END(2): 文件结尾
示例2-读写十六进制:
复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char* argv[])
{
FILE *fp = NULL;
int readbuf;
int readEnd;
int writebuf=100;
int len;
fp = fopen("./1.txt","rb+");
printf("read 1.txt: fp==NULL=%d size=%d\n",fp == NULL,sizeof(readbuf));
if(fp!=NULL) //打开成功,读数据
{
len=fread(&readbuf,sizeof(int),1,fp);
printf("read len=%d data=%d\n",len,readbuf);
fseek(fp,-sizeof(int),SEEK_END);
fread(&readEnd,sizeof(int),1,fp);
printf("read file end =%d\n",readEnd);
fclose(fp);
}
else //打开失败,则创建文件
{
fp = fopen("./1.txt","wb+");
printf("write 1.txt: fp==NULL=%d size=%d\n",fp == NULL,sizeof(readbuf));
if(fp!=NULL)
{
len=fwrite(&writebuf,sizeof(int),1,fp);
printf("write len=%d \n",len);
fclose(fp);
}
}
return 0;
}
复制代码
运行第一次:
运行第二次
如果在嵌入式linux中,则有可能在写数据后强制关电,此时数据还在缓冲区,并没写到flash中,所以需要在fclose()前面加上:
fflush(fp); //会把缓冲区中的文件写到文件系统中
fsync(fileno(fp)); //同步数据到flash
fclose(fp);
本文由职坐标整理并发布,了解更多内容,请关注职坐标编程语言C/C+频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号