C语⾔⽤函数的⽅式删除数据,C语⾔⽂件操作函数main()
{
char *s="That's good news";
int i=617;
FILE *fp;
fp=fopne("test.dat", "w"); /*建⽴⼀个⽂字⽂件只写*/
fputs("Your score of TOEFLis",fp); /*向所建⽂件写⼊⼀串字符*/
fputc(':', fp); /*向所建⽂件写冒号:*/
fprintf(fp, "%d\n", i); /*向所建⽂件写⼀整型数*/
fprintf(fp, "%s", s); /*向所建⽂件写⼀字符串*/
fclose(fp);
}
⽤DOS的TYPE命令显⽰TEST.DAT的内容如下所⽰:
屏幕显⽰
Your score of TOEFL is: 617
That's good news
下⾯的程序是把上⾯的⽂件test.dat⾥的内容在屏幕上显⽰出来:
#includemain()
{
char *s, m[20];
int i;
FILE *fp;
fp=fopen("test.dat", "r"); /*打开⽂字⽂件只读*/
fgets(s, 24, fp); /*从⽂件中读取23个字符*/
printf("%s", s);
fscanf(fp, "%d", &i); /*读取整型数*/
printf("%d", i);
putchar(fgetc(fp)); /*读取⼀个字符同时输出*/
fgets(m, 17, fp); /*读取16个字符*/
puts(m); /*输出所读字符串*/
fclose(fp);
getch();
}
运⾏后屏幕显⽰:
Your score of TOEFL is: 617
That's good news
4.清除和设置⽂件缓冲区
(1).清除⽂件缓冲区函数:
int fflush(FILE *stream);
int flushall();
fflush()函数将清除由stream指向的⽂件缓冲区⾥的内容,常⽤于写完⼀些数据后,⽴即⽤该函数清除缓冲区,以免误操作时,破坏原来的数据。
flushall()将清除所有打开⽂件所对应的⽂件缓冲区。
(2).设置⽂件缓冲区函数
void setbuf(FILE *stream,char *buf);
void setvbuf(FILE *stream,char *buf,int type,unsigned size);
这两个函数将使得打开⽂件后,⽤户可建⽴⾃⼰的⽂件缓冲区,⽽不使⽤fopen()函数打开⽂件设定的默认缓冲区。
对于setbuf()函数,buf指出的缓冲区长度由头⽂件stdio.h中定义的宏BUFSIZE的值决定,缺省值为512字节。当选定buf为空时,setbuf 函数将使的⽂件I/O不带缓冲。⽽对setvbuf函数,则由malloc函数来分配缓冲区。参数size指明了缓冲区的长度(必须⼤于0),⽽参数type则表⽰了缓冲的类型,其值可以取如下值:
type 值 含义
_IOFBF ⽂件全部缓冲,即缓冲区装满后,才能对⽂件读写
_IOLBF ⽂件⾏缓冲,即缓冲区接收到⼀个换⾏符时,才能对⽂件读写
_IONBF ⽂件不缓冲,此时忽略buf,size的值,直接读写⽂件,不再经过⽂件缓冲区缓冲
5.⽂件的随机读写函数
前⾯介绍的⽂件的字符/字符串读写,均是进⾏⽂件的顺序读写,即总是从⽂件的开头开始进⾏读写。这显然不能满⾜我们的要求,C语⾔提供了移动⽂件指针和随机读写的函数,它们是:
(1).移动⽂件指针函数:
long ftell(FILE *stream);
int rewind(FILE *stream);
fseek(FILE *stream,long offset,int origin);
函数ftell()⽤来得到⽂件指针离⽂件开头的偏移量。当返回值是-1时表⽰出错。
rewind()函数⽤于⽂件指针移到⽂件的开头,当移动成功时,返回0,否则返回⼀个⾮0值。
fseek()函数⽤于把⽂件指针以origin为起点移动offset个字节,其中origin指出的位置可有以下⼏种:
origin 数值 代表的具体位置
SEEK_SET 0 ⽂件开头
SEEK_CUR 1 ⽂件指针当前位置
SEEK_END 2 ⽂件尾
例如:
fseek(fp,10L,0);
把⽂件指针从⽂件开头移到第10字节处,由于offset参数要求是长整型数,故其数后带L。
fseek(fp,-15L,2);
把⽂件指针从⽂件尾向前移动15字节。
molloc函数(2).⽂件随机读写函数
int fread(void *ptr,int size,int nitems,FILE *stream);
int fwrite(void *ptr,int size,int nitems,FILE *stream);
fread()函数从流指针指定的⽂件中读取nitems个数据项,每个数据项的长度为size个字节,读取的nitems数据项存⼊由ptr指针指向的内存缓冲区中,在执⾏fread()函数时,⽂件指针随着读取的字节数⽽向后移动,最后移动结束的位置等于实际读出的字节数。该函数执⾏结束后,将返回实际读出的数
据项数,这个数据项数不⼀定等于设置的nitems,因为若⽂件中没有⾜够的数据项,或读中间出错,都会导致返回的数据项数少于设置的nitems。当返回数不等于nitems时,可以⽤feof()或ferror()函数进⾏检查。
fwrite()函数从ptr指向的缓冲区中取出长度为size字节的nitems个数据项,写⼊到流指针stream指向的⽂件中,执⾏该操作后,⽂件指针将向后移动,移动的字节数等于写⼊⽂件的字节数⽬。该函数操作完成后,也将返回写⼊的数据项数。
⼆、⾮标准⽂件的读写
这类函数最早⽤于UNIX操作系统,ANSI标准未定义,但有时也经常⽤到,DOS 3.0以上版本⽀持这些函数。它们的头⽂件为io.h。
由于我们不常⽤这些函数,所以在这⾥就简单说⼀下。
1.⽂件的打开和关闭
open()函数的作⽤是打开⽂件,其调⽤格式为:
int open(char *filename, int access);
该函数表⽰按access的要求打开名为filename的⽂件,返回值为⽂件描述字,其中access有两部分内容:
基本模式和修饰符, 两者⽤" "("或")⽅式连接。修饰符可以有多个, 但基本模式只能有⼀个。
access的规定
--------------------------------------------------------
基本模式 含义 修饰符 含 义
--------------------------------------------------------
O_RDONLY 只读 O_APPEND ⽂件指针指向末尾
O_WRONLY 只写 O_CREAT ⽂件不存在时创建⽂件, 属性按基本模式属性
O_RDWR 读写 O_TRUNC 若⽂件存在, 将其长度缩为0, 属性不变
O_BINARY 打开⼀个⼆进制⽂件
O_TEXT 打开⼀个⽂字⽂件
---------------------------------------------------------
open()函数打开成功, 返回值就是⽂件描述字的值(⾮负值), 否则返回-1。
close()函数的作⽤是关闭由open()函数打开的⽂件, 其调⽤格式为:
int close(int handle);
该函数关闭⽂件描述字handle相连的⽂件。
2.读写函数
int read(int handle, void *buf, int count);
read()函数从handle(⽂件描述字)相连的⽂件中, 读取count个字节放到buf所指的缓冲区中,
返回值为实际所读字节数, 返回-1表⽰出错。返回0 表⽰⽂件结束。
write()函数的调⽤格式为:
int write(int handle, void *buf, int count);
write()函数把count个字节从buf指向的缓冲区写⼊与handle相连的⽂件中, 返回值为实际写⼊的字节数。
3.随机定位函数
lseek()函数的调⽤格式为:
int lseek(int handle, long offset, int fromwhere);
该函数对与handle相连的⽂件位置指针进⾏定位,功能和⽤法与fseek()函数相同。
tell()函数的调⽤格式为:
long tell(int handle);
该函数返回与handle相连的⽂件现⽣位置指针, 功能和⽤法与ftell()相同。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论