c语⾔⾃定义创建⽂件,C语⾔⽂件定义、⽂件操作
⽂件操作时,要遵守先打开,再使⽤,最后关闭的原则。⽂件函数声明在“stdio.h”头⽂件中。
(1)⽂件打开与关闭
打开⽂件的实质是建⽴⽂件的各种有关信息,并使⽂件指针指向该⽂件,以便进⾏其它操作。⽂件的打开操作通过fopen函数实现。
a. fopen函数
函数原型:FILE *fopen(const char *path, const char *mode);
const char *path表⽰⽤字符串描述的被打开的⽂件名称(可以包含关于⽂件位置信息,如驱动器号或路径);const
char
*mode为⽤字符串描述的⽂件的打开模式,说明将要对⽂件执⾏的操作内容。例如“r”说明将从⽂件读出数据,但不能写⼊数据。例如:
FILE *fp ;
fp =
ascii文件夹怎么创建fopen (“d:\” , “r” ) ;
表⽰以只读的⽅式打开d:\data\⽬录下的⽂件,如果打开成功,则⽂件类型指针fp指向⽂件,否则fp指向NULL。
fopen函数允许在⽂件名称中省略⽂件所在的⽬录,⼀般为系统的当前⽬录。 例如:
fp=(“file.dat","r");
⽂件的打开⽅式不仅依赖于将要对⽂件采取的操作内容,还取决于⽂件中的数据是⽂本形式还是⼆进制形式。
打开⽂件可能因使⽤⽅式不对等原因,造成打开⽂件操作失败。为防⽌程序的异常退出,通常在执⾏⽂件的打开操作时都会判断所返回的⽂件指针是否为空。例如:
if
((fp =fopen(“file.c”, “r”)) == NULL )
{
printf(“⽆法打开该⽂件!\n”);
exit(0);
}
b. fclose函数
⽂件处理完成之后需要关闭⽂件,以保证所有数据正确读写完毕,并清理与当前⽂件相关的内存空间。通过fclose函数实现⽂件的关闭操作。
函数原型:int fclose(FILE *stream);
FILE *stream 必须是来⾃于fopen函数调⽤的⽂件指针。
fclose函数允许程序关闭不再使⽤的⽂件,fclose函数的返回值为int型,如果成功关闭了⽂件,则返回0,否则返回代码EOF。
(2)⽂件读写
当⽂件打开后,通过调⽤⽂件读写库函数实现对⽂件的读写操作。根据读写⽅式可将⽂件的读写操作分为单字符读写、字符串读写、格式化读写及数据块读写.
a. fputc函数
功能:向指定⽂件的当前位置写⼊(输出)⼀个单字符。
函数原型:int fputc(int c, FILE*stream);
int
c为准备写⼊的字符,可以是字符常量或字符变量。fputc函数返回⼀个int类型的数值。如果成功,返回写⼊的字符c;否则返回EOF(-1)。可⽤此来判断写⼊是否成功。
b. fgetc函数
功能:从⽂件的当前位置读取(输⼊)⼀个单字符。调⽤fgetc函数进⾏读取操作的⽂件必须以读或读写⽅式打开。
函数原型:int fgetc(FILE *stream);
fgetc函数返回指定⽂件中的下⼀个字符,返回值为int类型。如果成功,返回所读取字符的ASCII码值;如果遇到⽂件结束符或出错,返回EOF(-1)。
c. fputs函数
功能:⽤于向⽂件的当前位置写⼊(输出)字符串,既直接将字符串赋值指定⽂件。
函数原型:int fputs(const char *s,FILE *stream);
const char *s为要写⼊字符串,可以是字符串常量、字符数组名或字符型指针变量。 例如:
fputs(“Cprogramming“,fp);
fputs函数的返回值为int型,如果成功,返回0;否则返回EOF。
d. fgets函数
功能:从⽂件的当前位置读取(输⼊)字符串。既逐个读取字符,当从⽂件读出的字符到
n-1个字符时结束操作,并在读出最后⼀个字符后添加结束符‘\0’。
函数原型:char *fgets(char *str, intn, FILE *stream);
char *str
作为有效存储区域⾸地址,⽤于存储从⽂件中读取的字符串;intn表⽰最多能读取的字符个数。fgets函数的返回值为字符型指针。成功则返回有效存储区的⾸地址;如果遇到⽂件结束符或出错则返回NULL。
例如:
fgets(str,n,fp);
e. fscanf和fprintf函数
⽂件的格式化读写fscanf和fprintf与前⾯学习的格式化输⼊/输出函数scanf和printf功能类似,两者的区别在于fscanf函数和fprintf函数的读写对象是磁盘⽂件⽽不是键盘和显⽰器。
函数原型:int fprintf(FILE *stream, const char *format, ...);
int fscanf(FILE *stream, const char
*format,...);
例如:
fscanf(stream ,"%d", &d)
f. fwrite函数
⽤于将内存中指定存储区中没有任何格式的数据写⼊到以⼆进制模式打开的⽂件。
函数原型: size_t fwrite(const void *buffer, size_t size, size_t n,
FILE *stream);
size_t是在“stdio.h”⽂件中定义的类型;const void
*buffer为待写⼊数据块在内存中的⾸地址;size_t size表⽰以字节为单位的数据块⼤⼩;size_t
n表⽰要写⼊的数据块个数。
fwrite函数将*buffer中的n项信息写⼊由*stream指定的⽂件。每项信息的⼤⼩为size个字节。如果成功
写⼊,返回实际写⼊的数据块的个数(不是字节数),即size_t类型的数据。如果出现写⼊错误,则写⼊⽂件的数据块数会⼩于n。
g. fread函数
⽤于从⽂件中读取数据并存储在指定的存储区中。
函数原型:size_t fread(void *buffer,size_t size, size_t n, FILE
*stream);
fread函数从*stream指向的⽂件中,读出n项信息,每项数据的⼤⼩为size,保存在buffer处。fread函数返回成功读取的项数(size_t类型的数据),此数应该等于n值,如果读⾄⽂件尾部或出错,fread函数读取的项数可能少于n项。
例如:
fread(buffer,4,3,fp);
表⽰从fp所指向的⽂件中,每次读4个字节(⼀个实数)送⼊实数组buffer中,连续读3次,即读3个实数到buffer中。
h.fseek函数
最重要的⽂件定位函数,⽤于将读写位置指针移动⾄需要的位置。
函数原型:int fseek(FILE *stream,long offset, int whence);
long offset为⽂件位置指针的位移量;int
whence表⽰读写位置指针的起始点。
读写位置指针的起始点包括⽂件头、⽂件尾和⽂件当前位置,其值可以⽤符号常量SEEK_SET、SEEK_
END和SEEK_CUR表⽰(这些符号常量定义在stdio.h⽂件中)。
如果stream指向的⽂件已经以⼆进制⽅式打开,fseek函数将⽂件读写位置指针定位⾄距⽂件头或距⽂件尾或距⽂件当前位置offset(偏移量)个字节处。fseek函数的返回值为int型,如果⽂件定位成功则返回0,否则返回⾮零值。
i. rewind函数
将由stream指向的⽂件的位置指针设置在⽂件⾸部。
函数原型:void rewind(FILE *stream);
例如:
rewind(fp);
表⽰将读写位置指针移动到⽂件开头,并清除状态标志。
j. ftell函数
⽤于获取⽂件读写指针当前的位置,该位置是相对于⽂件⾸部的位移量。
函数原型:long ftell(FILE *stream);
ftell函数以long
int型返回当前⽂件位置。即:如果⽂件以⼆进制⽅式打开,ftell函数返回由stream指向的⽂件从⽂件头到⽂件位置指针所指⽰位置处的字节偏移量。如果发⽣错误,ftell函数将返回-1L。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论