嵌入式第四课-C文件操作
Posted Soaring2020
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式第四课-C文件操作相关的知识,希望对你有一定的参考价值。
1.c语言文件操作函数
fopen/fclose/fread/fwrite/fseek
1).fopen: FILE *fopen(const char *filename,const char *mode);
函数功能 :打开一个文件
参数 filename :文件路径
参数mode :打开方式
返回值 :打开成功返回一个标准数据指针 失败返回NULL
mode参数如下:
r | 以只读方式打开文件,该文件必须存在。 |
r+ | 以读/写方式打开文件,该文件必须存在。 |
rb+ | 以读/写方式打开一个二进制文件,只允许读/写数据。 |
rt+ | 以读/写方式打开一个文本文件,允许读和写。 |
w | 打开只写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。 |
w+ | 打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。 |
a | 以附加的方式打开只写文件。若文件不存在,则会创建该文件;如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(EOF 符保留)。 |
a+ | 以附加方式打开可读/写的文件。若文件不存在,则会创建该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(EOF符不保留)。 |
wb | 以只写方式打开或新建一个二进制文件,只允许写数据。 |
wb+ | 以读/写方式打开或新建一个二进制文件,允许读和写。 |
wt+ | 以读/写方式打开或新建一个文本文件,允许读和写。 |
at+ | 以读/写方式打开一个文本文件,允许读或在文本末追加数据。 |
ab+ | 以读/写方式打开一个二进制文件,允许读或在文件末追加数据。 |
示例:
#include <stdio.h>
int main(void)
{
int a[] = {1,2,3,4,5,6,7};
int len =sizeof(a)/sizeof(a[0]);
FILE *fp = NULL;
fp = fopen("/myproject/txt.txt","r+");
if(fp==NULL)
{
printf("failed open file!\\r\\n");
return -1;
}
else
{
printf("success open file!\\r\\n ");
}
fclose(fp);
return 0;
}
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
返回值:返回实际写入的数据块数目
(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
(5)返回实际写入的数据项个数count。
|
从给定输入流stream读取最多count个对象到数组buffer中(相当于以对每个对象调用size次fgetc),把buffer当作unsigned char数组并顺序保存结果。流的文件位置指示器前进读取的字节数。
若出现错误,则流的文件位置指示器的位置不确定。若没有完整地读入最后一个元素,则其值不确定。
参数
buffer | 指向要读取的数组中首个对象的指针 |
size | 每个对象的大小(单位是字节) |
count | 要读取的对象个数 |
stream | 输入流 |
返回值
返回成功读取的对象个数,若出现错误或到达文件末尾,则可能小于count。
若size或count为零,则fread返回零且不进行其他动作。
fread不区分文件尾和错误,因此调用者必须用feof和ferror才能判断发生了什么。
函数名: rewind()
功 能: 将文件内部的位置指针重新指向一个流(数据流/文件)的开头
注意:不是文件指针而是文件内部的位置指针,随着对文件的读写文件的位置指针(指向当前读写字节)向后移动。而文件指针是指向整个文件,如果不重新赋值文件指针不会改变。
rewind函数作用等同于 (void)fseek(stream, 0L, SEEK_SET); [1]
用 法: void rewind(FILE *stream);
头文件: stdio.h
返回值:无
int fseek( FILE *stream, long offset, int origin );
第一个参数stream为文件指针
第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.
简言之:
fseek(fp,100L,0);把stream指针移动到离文件开头100字节处;
fseek(fp,100L,1);把stream指针移动到离文件当前位置100字节处;
fseek(fp,-100L,2);把stream指针退回到离文件结尾100字节处。
示例:
#include <stdio.h>
int main(void)
{
int a[] = {1,2,3,4,5,6,7};
int len =sizeof(a)/sizeof(a[0]);
FILE *fp = NULL;
fp = fopen("/myproject/txt.txt","r+");
if(fp==NULL)
{
printf("failed open file!\\r\\n");
return -1;
}
else
{
printf("success open file!\\r\\n ");
}
int size = 0;
size = fwrite(a,sizeof(int),len,fp);
printf("write data num is %d\\r\\n ",size);
int readdata[100]={0};
rewind(fp);
size = fread(readdata,sizeof(int),len,fp);
for(int i=0;i<size;i++)
{
printf("%d ",readdata[i]);
}
printf("\\r\\n");
fseek(fp,8,SEEK_SET);
size = fread(readdata+20,sizeof(int),5,fp);
for(int i=0;i<size;i++)
{
printf("%d ",*(readdata+20+i));
}
printf("\\r\\n");
fclose(fp);
return 0;
}
执行结果:
嵌入式第三课-第一个helloworld程序 https://blog.csdn.net/qq_21919455/article/details/117189303
嵌入式第五课-c语言结构体 :https://blog.csdn.net/qq_21919455/article/details/117262588
以上是关于嵌入式第四课-C文件操作的主要内容,如果未能解决你的问题,请参考以下文章