文件操作

文件操作

二进制文件和文本文件

  • 二进制文件是一种字节序列,没有字符变换,其中的数据以二进制存储
  • 文本文件是一种字符序列,其中的数据以ASCII码存储

存储数据123时占用空间:

二进制文件:    00000000 01111011
                            123(bin)
文本文件:      00110001 00110010 00110011
                    "1"      "2"      "3"

文件的打开与关闭

打开文件

fopen()函数,返回值为文件指针,若返回为NULL则表示文件不存在。
函数原型:

FILE *fopen(const char *filename, const char *mode);

stdio.h中定义了结构体 FILE。

// 例子:只读打开"D:\\text.txt"(首先确保此文件存在)

FILE *fp = fopen("D:\\text.txt", "r");

关闭文件

fclose()函数,当关闭成功时返回0,否则返回非0值。
函数原型:

int fclose(FILE *fp);

文件读写

按字符读写文件

读出字符fgetc()

函数fgetc()用于从一个以只读或读写方式打开的文件上读字符。
函数原型:

int fgetc(FILE *fp);
// fp是函数 fopen() 返回的文件指针

若读取成功,则返回该字符;若读到文件末尾,则返回EOF(一个符号变量,在stdio.h中定义为-1)

写入字符fputc()

函数fputc()用于将一个字符写入一个文件
函数原型:

int fputc(int c, FILE *fp);
// fp是函数 fopen() 返回的文件指针,c 是要输入的字符

若成功写入,返回字符c;若写入错误,则返回EOF

按字符串读写

按字符串读fgets()

char *fgets(char *s,int n,FILE *fp);
// 从fp所指的文件中读取字符串并在字符串末尾添加'\0',然后存入s,最多读n-1个字符
// 当读到回车换行符、文件末尾或读满n-1个字符时函数返回该字符串的首地址

若出现写入错误,则返回 EOF,否则返回一个非负数

按字符串写fputs()

int fputs(const char *s, FILE *fp);

按格式读写

按格式读fscanf()

int fscanf(FILE *fp, const char *format, ...);
// 比 scanf() 多了文件指针

从fp中读:

fscanf(fp, "%d%f", &i, &t);

按格式写fprintf()

int fprintf(FILE *fp,const char *format,...);
// 比 printf() 多了文件指针

写入fp:

fprintf(fp, "%d,%6.2f", i, t);

按数据块读写

数据块读fread()

从fp所指的文件中读取数据块并存储到buffer指向的内存中

unsigned int fread(void *buffer, unsigned int size, unsigned int count, FILE *fp);
// buffer是数据块起始地址

返回实际读到的数据块个数

数据块写fwrite()

将buffer指向的内存中的数据块写入fp所指的文件

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

使用举例:
若文件以二进制形式打开:
fread(f,4,2,fp);
此函数从fp所指向的文件中读入2个4个字节的数据,存储到指针f所指向的空间中。

文件随机访问

fseek()

将fp的文件位置指针从fromwhere开始移动offset个字节,指示下一个要读取数据的位置

int fseek(FILE *fp, long offset, int fromwhere);
// ANSI C 要求偏移量offset为长整型数据,常量数据后要加L
// fromwhere有三个取值:0(SEEK_SET)表示文件开始,1(SEEK_CUR)表示当前位置,2(SEEK_END)表示文件末尾

fseek函数应用举例
fseek(fp, 100L, 0);
将位置指针移到离文件头100个字节处。
fseek(fp, 50L, 1);
将位置指针移到离当前位置50个字节处。
fseek(fp, -10L, 2);
将位置指针从文件末尾处向后退10个字节。

rewind()

void rewind(FILE *fp);

将文件位置指针指向文件首字节,即重置到文件首部

ftell()

long ftell(FILE *fp);

按相对文件首部的偏移量来表示当前文件指针位置

posted on 2023-12-15 09:14  GisliW  阅读(9)  评论(0编辑  收藏  举报