【嵌入式——C语言】文件操作

【嵌入式——C语言】文件操作

  • 文件指针
  • 打开文件
    • 文件打开的方式
  • 关闭文件
  • 一次读写一个字符
  • 一次读写一个字符串
  • 读文件
  • 写文件
  • 随机读写
    • rewind
    • fseek
    • long ftell

文件指针

文件指针在程序中用来标识一个文件的,在打开文件的时候得到文件指针,文件指针就用来代表打开的文件,对文件进行读、写、关闭等操作时,对文件指针操作即可,将文件指针传给相应的读、写、关闭函数。
需要引入#include

FILE * 文件指针变量名;

打开文件

打开一个已经存在的文件,并返回这个文件的文件指针或者创建一个文件,并打开这个文件,并返回这个文件的文件指针。

FILE* fopen(char const* _FileName,char const* _Mode)
参数1 打开的文件名称、路径+名称
参数2 文件打开的方式

文件打开的方式

  • 只读®:文件不存在返回NULL,文件存在且打开成功,返回文件指针,r(文本文件)、rb(二进制文件);
  • 只写(w):文件不存在,以指定文件名创建文件并打开,文件存在,清空文件内容,打开文件,进行写操作,文件打不开,返回NULL,w(文本文件)、wb(二进制文件);
  • 可读可写(+):r+(文本文件)、rb+(二进制文件);
  • 追加(a):文件不存在,创建该文件,文件存在,在文件末尾进行写操作,a(文本文件)、ab(二进制文件);
FILE* fp;
fp=fopen("filename.txt","r");

关闭文件

关闭fp所代表的文件,一个文件只能关闭一次,成功返回0,不成功返回非0,关闭之后就不能在对文件指针进行读写操作了。

int fclose(FILE* fp)

一次读写一个字符

从文件中读取一个字节,将字节值返回。
:EOF 是常量-1。

  • 以文本(t)的方式,读到结尾返回EOF;
  • 以二进制(b)的方式,读到文件结尾,以feof(文件指针)方法判断是否结尾,文件结束返回非0,未结束返回0。
int fgetc(FILE* stream)

将c写入stream所代表的文件中。输出成功返回输出的字节值,输出失败返回EOF。

int fputc(int c,FILE* stream)

一次读写一个字符串

从stream所代表的文件中读取字符,在读取的时候碰到换行符或者到了文件末尾停止读取,或者读取了size-1个字节停止读取,在读取的内容后面会加\0,作为字符串的结尾。读取成功返回数组的首地址,即s,读取失败返回NULL。

char* fgets(char* s,int size, FILE* stream)

将s所指的字符串写到stream代表的文件中,成功返回写入的字节数,失败返回-1。

int fputs(char const* s, FILE* stream)

读文件

从stream所表示的文件中读取数据,每块是size个字节,共是nmemb块,存放到ptr指向的内存里,返回值,实际读取到的块数。

size_t fread(void* ptr,size_t  size , size_t nmemb, FILE*  stream)

写文件

将ptr指向的内存里的数据,向stream所代表的文件中写入数据,每块size个字节,共nmemb块,返回值,实际写入的块数。

size_t fwrite(void const* ptr, size_t   size , size_t   nmemb , FILE* stream)

随机读写

rewind

复位读写位置,把文件内部的位置指针移动到文件首。

FILE* fp;
rewind(fp);

fseek

定位位置指针,移动文件流的读写位置,一般用于二进制文件。

int fseek(文件指针,偏移量,起始位置)

起始位置:

  • 文件开头 SEEK_SET 0;
  • 文件当前位置 SEEK_CUR 1;
  • 文件末尾 SEEK_END 2;

偏移量: 以起始点为基点,向前向后移动的字节数,整数向后偏移,负数向前偏移。

long ftell

取得文件流目前的读写位置,返回当前读写位置,距离文件起始的字节数,出错返回-1。

FILE* fp;
long ftell(fp);

你可能感兴趣的:(c语言,开发语言,嵌入式硬件,物联网,iot)