链表通讯录 文件编程部分

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)。由此可判断文件打开是否成功。
  1. FILE * fopen(const char * path,const char * mode);  
  2.     -- path: 文件路径,如:"F:\Visual Stdio 2012\test.txt"  
  3.     -- mode: 文件打开方式,例如:  
  4.              "r" 以只读方式打开文件,该文件必须存在。  
  5.              "w" 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。  
  6.             "w+" 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。  
  7.              "a" 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)  
  8.              "a+" 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。(原来的EOF符不保留)  
  9.             "wb" 只写打开或新建一个二进制文件,只允许写数据。  
  10.             "wb+" 读写打开或建立一个二进制文件,允许读和写。  
  11.              "ab" 追加打开一个二进制文件,并在文件末尾写数据。  
  12.              "ab+"读写打开一个二进制文件,允许读,或在文件末追加数据。     
  13.     --返回值: 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。        

fread()函数:
1. 作用:从一个文件流中读取数据
2. 函数原型如下:

[cpp]  view plain  copy
  1. size_t fread(void *buffer, size_t size, size_t count, FILE *stream);  
  2.   -- buffer:指向数据块的指针  
  3.   -- size:每个数据的大小,单位为Byte(例如:sizeof(int)就是4)  
  4.   -- count:数据个数  
  5.   -- 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()获得当前位置相对于文件首的位移,该位移值等于文件所含字节数。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值