1 #define fname "TXL.db" 定义文件名
int Rfile(llist *L){
FILE *fp; 定义一个指向文件流的指针,通过操作这个指针你就能进行文件读写,打开关闭
DataType e;
int i,size;
if((fp=fopen(fname,"r"))==NULL)
{
perror("打开文件失败");
return FALSE;
}
fseek(fp,0,SEEK_END);
size=ftell(fp)/sizeof(DataType);
rewind(fp);
for(i=0;i<size;i++){
fread(&e,sizeof(DataType),1,fp);
ListInsert(L,1,e);
}
fclose(fp);
return TRUE;
}
FILE *fopen(const char *filename, const char *mode)filename:打开的文件名(包含路径,缺省为当前路径)
mode: 打开模式如下
r, rb : 只读方式打开,文件必须已存在
w,wb : 只写方式打开,如果文件不存在则创建,
如果文 件已存在清空重写
a, ab: 只能在文件末尾追加数据,如果文件不存在则创建
r+,rb+,r+b: 读写方式打开,文件必须已存在
w+,w+b,wb+: 读写方式打开,如果文件不存在则
创建,如果文件已存在清空重写
a+,a+b,ab+: 读和追加方式打开,如果文件不存在则创建
fopen()函数:
1.作用: 在C语言中fopen()函数用于打开指定路径的文件,获取指向该文件的指针。
如果成功的打开一个文件, fopen()函数返回文件指针, 否则返回空指针 (NULL)。由此可判断文件打开是否成功。
- FILE * fopen(const char * path,const char * mode);
- -- path: 文件路径,如:"F:\Visual Stdio 2012\test.txt"
- -- mode: 文件打开方式,例如:
- "r" 以只读方式打开文件,该文件必须存在。
- "w" 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
- "w+" 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
- "a" 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
- "a+" 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。(原来的EOF符不保留)
- "wb" 只写打开或新建一个二进制文件,只允许写数据。
- "wb+" 读写打开或建立一个二进制文件,允许读和写。
- "ab" 追加打开一个二进制文件,并在文件末尾写数据。
- "ab+"读写打开一个二进制文件,允许读,或在文件末追加数据。
- --返回值: 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
fread()函数:
1. 作用:从一个文件流中读取数据
2. 函数原型如下:
- size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
- -- buffer:指向数据块的指针
- -- size:每个数据的大小,单位为Byte(例如:sizeof(int)就是4)
- -- count:数据个数
- -- stream:文件指针
(1) 调用格式:fread(buf,sizeof(buf),1,fp);
读取成功时:当读取的数据量正好是sizeof(buf)个Byte时,返回值为1(即count)
否则返回值为0(读取数据量小于sizeof(buf))
(2)调用格式:fread(buf,1,sizeof(buf),fp);
读取成功返回值为实际读回的数据个数(单位为Byte)
fseek是用来设置文件指针stream的位置的函数。
函数原型:int fseek(FILE *stream, long offset, int fromwhere);
参数:stream 是指向打开文件的指针,fromwhere 基准点,offset以基准点为起始点的偏移量。
这个偏移量常见的是SEEK_END和SEEK_set,即末尾和开头
ftell() 返回当前文件位置,也就是说返回FILE指针当前位置。
#include<stdio.h>
long ftell(FILE *stream);
函数 ftell() 用于得到文件位置指针当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。使用fseek函数后再调用函数ftell()就能非常容易地确定文件的当前位置。
ftell(fp);利用函数 ftell() 也能方便地知道一个文件的长。如以下语句序列: fseek(fp, 0L,SEEK_END); len =ftell(fp)+1; 首先将文件的当前位置移到文件的末尾,然后调用函数ftell()获得当前位置相对于文件首的位移,该位移值等于文件所含字节数。