@[TOC]文件目录时间管理
一、 文件操作
根据文件中数据组织形式的不同,可以分为文本文件和二进制文件,c语言源代码是文本文件,编译成可执行的程序是二进制文件。c语言操作文件时,必须先打开文件,进行读写完成后,再关闭文件。
操作文件的时候,C语言为文件分配一个信息区,该信息区包含文件描述信息、缓冲区位置、缓冲区大小、文件读写到的位置等基本信息,这些信息用一个结构体来存放(struct _IO_FILE),这个结构体有一个别名FILE(typedef struct _IO_FILE FILE),FILE结构体和对文件操作的库函数在 stdio.h 头文件中声明的。
结构体声明:
struct_iobuf{
char*_ptr;
int _cnt;
char*_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char*_tmpfname;
};typedefstruct_iobufFILE;
1.文件的打开
c语言的库函数提供fopen来创建一个新的文件或者打开已有的文件,调用fopen之后返回一个文件指针File*
打开文件的时候,fopen函数中会动态分配一个FILE结构体大小的内存空间,并把FILE结构体内存的地址作为函数的返回值,程序中用FILE结构体指针存放这个地址。
关闭文件的时候,fclose函数除了关闭文件,还会释放FILE结构体占用的内存空间。
函数原型如下:
FILE *fopen(const char *path, const char *mode);
path是字符串,表示要打开的文件名,可以包含目录名,如果没有包含路径表示程序运行的当前路径,一般采取全路径。
mode也是字符串,表示打开文件的方式。
方式 | 说明 |
---|---|
r | 只读,文件必须存在否则打开失败 |
w | 只写,如果文件存在,则清除原文内容;如果不存在,则新建文件 |
a | 追加只写,如果文件存在,则打开;如果不存在,则新建文件 |
r+ | 读写,文件必须存在。在只读r的基础上增加可写功能 |
w + | 读写,在w的方式上增加可读功能 |
a+ | 读写,在a的方式上增加可读功能 |
例如: |
if ( (fp=fopen("/root/Block/test.c","r")) == 0 )
fp为文件指针,存储fopen函数的返回的值
2.文件的关闭
函数声明:
int fclose(FILE *fp);
fp为fopen函数返回的文件指针
3.文本文件的读写
实际快发中,文本文件以行的形式存放字符串,如c程序源代码或者一段文字,所以是按行写入和读取数据。
(1)向文件中写入数据
函数声明:
int fprintf(FILE *stream, const char *format, ...);
Description:The functions in the printf() family produce output according to a format as described below.fprintf() and vfprintf() write output to the given output stream;
stream为函数返回的文件指针,一般不关心其值,format为字符串,表示写入的内容
例如:
fprintf(fp,"这是第%d个数字。\n",i+1);
(2)从文件中读取数据
函数声明:
char *fgets(char *s, int size, FILE *stream);
fgets的功能是从文件中读取不超过size大小字的符数据存储到s指向的(地址)缓存区里。stream为待读取文件的文件指针。
Description:fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s.
例如:
while (1)
{
memset(strbuf,0,sizeof(strbuf)); //初始化
if (fgets(strbuf,301,fp)==0) break; //fgets()==0,即为真,读取成功;若为-1,读取失败