C语言文件操作详解
文件在我们计算机中是一个很常见的名词,那么到底什么是文件呢,文件的类型又包涵哪些呢?下面就由我来一一为大家介绍。
文件一般包括:程序文件和数据文件。
程序文件:包括源程序文件(xxx.c),目标文件 (在windows环境下的.obj),可执行程序(windows下的…exe)。
数据文件:一般是指数据库的文件
其中数据文件根据数据的组织形式,数据文件又被称为文本文件或者二进制文件。
文本文件是指以ASCII字符的形式存储的文件就是文本文件。
而二进制文件则指数据在内存中以二进制的形式存储。
文件缓冲区
文件缓冲区是用以暂时存放读写期间的文件数据而在内存区预留的一定空间。通过磁盘缓存来实现,磁盘缓存本身并不是一种实际存在的存储介质,它依托于固定磁盘,提供对主存储器存储空间的扩充,即利用主存中的存储空间, 来暂存从磁盘中读出(或写入)的信息。 主存也可以看做是辅存的高速缓存, 因为,辅存中的数据必须复制到主存方能使用;反之,数据也必须先存在主存中,才能输出到辅存。
文件指针``
在C语言中用一个指针变量指向一个文件,这个指针称为文件指针
每打开一个文件,系统就会自动创建一个文件指针的结构体类型,并返回其地址(FILE *fopen( const char *filename, const char *mode ));
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
文件的打开与关闭
在我们对文件的操作前,我们必须先打开文件,在使用结束后我们必须要关闭文件。
标准C规定,我们用fopen()函数来打开文件,fclose来关闭文件,其中打开方式有以下几种方式:
在文件的顺序读写中,我们有许多功能的函数:列如fgetc,fputc,fgets,fputs,fscanf,fprintf,fread,fwrite.
int main()
{
FILE* pr = fopen("data.txt", "w");
if (pr == NULL)
{
return 1;
}
fputc('a', pr);
fclose(pr);
pr = NULL;
return 0;
}
int main()
{
FILE* pr = fopen("data.txt", "r");
if (pr == NULL)
{
return 1;
}
printf("%c",fgetc(pr));
fclose(pr);
pr = NULL;
return 0;
}
int main()
{
FILE* pr = fopen("data.txt", "w");
if (pr == NULL)
{
return 1;
}
fputs("abcdef", pr);
fclose(pr);
pr = NULL;
return 0;
}
剩下的函数就不一一测试了,感兴趣的可以去测试。
接下来我们来认识一下文件的随机读写。
fseek
int fseek( FILE *stream, long offset, int origin );
int main()
{
FILE* pr = fopen("data.txt", "w");
if (pr == NULL)
{
return 1;
}
fputs("Hello World!", pr);
fseek(pr, 9, SEEK_SET);
fclose(pr);
pr = NULL;
return 0;
}
ftell
long int ftell ( FILE * stream )
int main()
{
FILE* pr = fopen("data.txt", "r");
if (pr == NULL)
{
return 1;
}
fgetc(pr);
fgetc(pr);
printf("%d\n", ftell(pr));
fgetc(pr);
printf("%d\n", ftell(pr));
fclose(pr);
pr = NULL;
return 0;
}

**fewind**
void rewind( FILE *stream );
```c
int main()
{
FILE* pr = fopen("data.txt", "r");
if (pr == NULL)
{
return 1;
}
fgetc(pr);
fgetc(pr);
printf("%d\n", ftell(pr));
fgetc(pr);
printf("%d\n", ftell(pr));
fgetc(pr);
rewind(pr);
printf("%d\n", ftell(pr));
fclose(pr);
pr = NULL;
return 0;
}