基于库函数的文件类编程

来源:互联网 发布:成都初级u3d程序员工资 编辑:程序博客网 时间:2024/05/20 11:33

库函数编程优点:

基于C函数库的文件编程是独立于具体的操作系统平台的,不管是在Windows、Linux还是其他的操作系统中,都是使用这些函数。使用库函数进行程序设计可提高程序的可移植性

流的概念:

对于标准的C函数库,它们的操作都是围绕“流”来进行的。流是一个抽象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。

文件指针:

在系统调用方式实现的文件访问中,使用文件描述符(一个整数)来指向一个文件。在库函数方式的文件访问中,使用FILE类型来表示一个打开的文件,这个类型中包含了管理文件流的信息。而指向该类型的指针 FILE* 则被称之为文件指针

打开文件

函数原形:
FILE *fopen(const char *path, const char *mode);

函数功能:
打开文件

所属头文件:

#include <stdio.h>

返回值:
成功打开,返回文件指针;打开失败,返回空指针。

参数说明:
path:指定文件打开的路径,包含文件名。
mode:指明文件打开的模式。r,r+,w,w+,a,a+。
注意:这两个参数都是字符串,都要加上双引号。

关闭文件

函数原形:
int fclose(FILE *fp);

函数功能:
关闭一个打开的文件流

所属头文件:

#include <stdio.h>

返回值:
关闭成功,返回0;关闭失败,返回EOF。EOF是一个宏定义。

参数说明:
fp:打开的文件流。

读文件

函数原形:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

函数功能:
从打开的文件流中读取数据。

所属头文件:

#include <stdio.h>

返回值:
若读成功,返回读出来的数据单元的数量,注意不是字节数目;若读失败,返回0。

参数说明:
ptr:读出来的数据存放的地址。
size:读出来的数据每个单元有多少字节。
nmemb:读出来的数据有多少单元。
stream:指向要读取的文件,文件流指针fp。

写文件

函数原形:
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

函数功能:
向文件中写入数据。

所属头文件:

#include <stdio.h>

返回值:
若读成功,返回读出来的数据单元的数量,注意不是字节数目;若读失败,返回0。

参数说明:
ptr:写入的数据存放的地址。
size:写入的数据每个单元有多少字节。
nmemb:写入的数据有多少单元。
stream:指向要写入的文件,文件流指针fp。

定位文件

函数原形:
int fseek(FILE *stream, long offset, int whence);

函数功能:
重新定位文件流指向的文件中的位置指针的位置。

所属头文件:

#include <stdio.h>

返回值:
定位成功,返回0;定位失败,返回-1.

参数说明:
stream:指向的文件流
offset:所需要的位置指针的位置偏移,若为正数则向后移,若为负数则向前移。
whence:以下三种选一种:
SEEK_SET:将指针位置设置为offset的位置。
SEEK_CUR:将指针位置设置为当前位置加上offset的位置。
SEEK_END:将指针位置设置为文件结尾加上offset的位置。

例程:

* 本文件是通过库函数方式进行文件编程 */#include <stdio.h>void main(){    int a;    int count_read;    int count_write;    int count_seek;    char buf_read[512];    char buf_write[512] = "1234567890987654321";    //打开文件    FILE *fp;    fp = fopen("./test.c","w+");    if (fp != NULL)        printf("open successfully.\n");    //写文件    count_write = fwrite(buf_write, 2, 5, fp);    printf("the write number is %d.\n", count_write);    //定位文件位置指针    count_seek = fseek(fp, 0, SEEK_SET);    if (count_seek == 0)        printf("seek successfully.\n");     //读文件    count_read = fread(buf_read, 2, 5, fp);    buf_read[10] = '\0';    printf("read buffer is %s, the number is %d.\n",buf_read, count_read);    //关闭文件    a = fclose(fp);    if (a == 0)        printf("close successfully.\n");}
0 0