文件操作函数(2)

不打扰是莪最后的温柔 提交于 2020-01-18 08:02:00

一、块读写

    块读写主要涉及到两个函数fread和fwrite,这两个函数的原型是:

    unsigned int fread(void *buffer,unsigned int size,unsigned int n,FILE *fp);

   从文件读取一组数据存放在首地址为buffer的内存空间中,size为一个数据块的大小,n为要读取的数据块的个数,若读取成功,则返回读取的数据的数据块的个数,否则返回0.

    unsigned int fwrite(const void *buffer,unsigned int size,unsigned int n,FILE *fp);

    向文件中写入数据,写入成功返回写入数据块的个数,否则返回0.

    块读写一般用于结构体。

    注意:

    1)块读写常用于结构体。

    2)fread和fwrite一般成对出现,如果对文件进行写操作用的是fwrite,则用fread读取,否则可能会得到意想不到的结果。

二、格式化读写

  格式化读写主要涉及到两个函数:fscanf和fprintf,两个函数的原型是

  int fscanf(FILE *fp,const char *format[,argument]....);

  用于从文件格式化读取数据,若读取成功,则返回读取的数据个数,否则返回-1

  int fprintf(FILE *fp,const char *format[,argument]....);

  用于向文件格式化写入数据,若写入成功,则返回写入的字符个数,否则返回-1

  注意:

  1)格式化读写和其他几种读写有很大的不同。格式化读写是以我们人所能识别的格式将数据写入文件,即若以格式化方式写入一个整型数值65,则其实是写入的两个字符'6'和'5',即占2字节,而不是4字节,但是若以块写方式写入,则其占4字节。即在使用格式化读写时系统自动进行了一些转换。

  2)fprintf和fscanf函数一般成对出现,若数据是用fprintf进行写入的,则最好使用fscanf进行读取。

  3)在使用fprintf函数写入时,若文件是以文本方式打开,如果参数format中包含了'\n',则最后文件中会被写入换行符;而若文件以二进制方式打开,则文件中不会被写入换行符。

三、移动位置指针的函数

   rewind函数和fseek函数,这两个函数的原型是:

   void rewind(FILE *fp);     将位置指针移动到文件首

   int fseek(FILE *fp,long int offset,int origin);   将位置指针移动到距离origin的offset字节数的位置

   其中对于fseek函数中的参数,origin为起始点,offset为距离origin的偏移字节数

   origin的值有三个:SEEK_SET(0)—>文件首,SEEK_CUR(1)—>当前位置,SEEK_END(2)—>文件尾。

注意:1)若文件是以追加方式打开,则当进行写操作时,这两个函数是不起作用的,无论将位置指针移动哪个位置,始终将添加的数据追加到文件末尾。

四、其他常用函数

1.ftell函数

long int ftell(FILE *fp);

计算当前位置指针距文件首的字节数,若出错,则返回-1L。

利用ftell函数可以计算出文件的大小。

2.feof函数

int feof(FILE *fp);

检测当前位置指针是否到达文件末尾,若到达文件末尾,则返回一个非零值,否则返回0。

3.ferror函数

int ferror(FILE *fp);

检测文件操作过程中是否出错,若出错,则返回一个非零值,否则返回0

4.remove函数

int remove(const char *filename);

删除文件,若删除成功,则返回0,否则返回非零值

5.rename函数

int rename(const char *oldname,const char *newname);

将文件重命名,重命名成功则返回0,否则返回非零值。

6.freopen函数

FILE* freopen(const char *filename,const char *mode,FILE *stream);

实现重定向输入输出。此函数在测试数据时用得比较多。

7.fclose函数

int fclose(FILE *stream);

关闭一个流,若成功,则返回0,否则返回-1.注意每次对文件操作完之后需关闭流,否则可能会造成数据丢失。

 摘自海子博客:http://www.cnblogs.com/dolphin0520/archive/2011/10/07/2200454.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!