三、库函数文件类
库函数:基于C函数库的文件编程是独立于具体的操作系统平台的,不管是在Windows、Linux还是其他的操作系统中,都是使用这些函数。使用库函数进行程序设计可提高程序的可移植性。
流:对于标准的C函数库,它们的操作都是围绕流来进行的。流是一个抽象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。
文件指针:在系统调用方式实现的文件访问中,使用文件描述符(一个整数)来指向一个文件。在库函数方式的文件访问中,使用FILE类型来表示一个打开的文件,这个类型中包含了管理文件流的信息。而指向该类型的指针FILE* 则被称之为文件指针。
3.1.打开文件: FILE *fopen(const char *path, const char *mode);
打开文件
所属头文件: stdio.h
返回值: 成功:返回文件指针 失败:NULL
参数说明: path:指定打开的文件名字(含路径)
mode:文件打开模式 r、r+、w、w+、a、a+
mod是字符串,需要加双引号
-
#include <stdio.h>
-
-
-
void main()
-
{
-
FILE *fp;
-
char *path = "./test.c";
-
-
fp = fopen(path, "w+");
-
if(fp < 0)
-
printf("file fopen failed!\n");
-
-
-
}
3.2.关闭文件: int fclose(FILE *fp);
关闭一个文件流
所属头文件: stdio.h
返回值: 成功:0 失败:EOF
参数说明: fp:待关闭的文件指针
-
#include <stdio.h>
-
-
void main()
-
{
-
FILE *fp;
-
char *path = "./test";
-
-
fp = fopen(path, "w+");
-
if(fp < 0)
-
printf("file fopen failed!\n");
-
-
close(fp);
-
}
3.3.读文件: size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);
从文件中读取数据
所属头文件:
返回值: 成功:返回读取到的数据量 失败:0
参数说明: ptr:文件读取出来后的存放位置
size:读取每块数据的大小
nmemb:读取的数据块数
stream:指向要读取的文件
w+会对存在的文件清空内容,导致读取有误:
-
#include <stdio.h>
-
-
void main()
-
{
-
FILE *fp;
-
char buf[20];
-
size_t ret;
-
-
fp = fopen("./test.c","r+");
-
if(fp == 0)
-
{
-
printf("file fopen failed!\n");
-
return;
-
}
-
-
ret = fread(buf,5,2,fp);
-
if(ret == 0)
-
printf("file fread failed!\n");
-
else
-
{
-
buf[10] = '\0';
-
printf("now we read %s\n",buf);
-
}
-
-
fclose(fp);
-
}
3.4.写文件: size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream);
向文件写入
所属头文件: stdio.h
返回值: 成功:返回成功写入的数据量 失败、达到文件结尾:0
参数说明: Ptr:要写入数据的文件指针
Size:每块数据的大小
Nmemb:数据的块数
Stream:指向要写入的文件
-
#include <stdio.h>
-
-
void main()
-
{
-
FILE *fp;
-
size_t ret;
-
char *buf = "this is my string.";
-
-
fp = fopen("./test.c", "w+");
-
if(fp == NULL)
-
printf("file fopen failed!\n");
-
-
ret = fwrite(buf, 18, 1, fp);
-
if(ret == 0)
-
printf("file fwriet failed!\n");
-
-
fclose(fp);
-
}
3.5.定位文件 Int fseek(FILE *stream,long offset, int whence);
设置位文件位置指针
所属头文件: stdio.h
返回值: 成功:0 失败:-1
参数说明: Stream:设置指针位置的文件指针
Offset:偏移量;正数往后,负数往前
Whence:设置指针位置
SEEK_SET 文件开头
SEEK_CUR:当前位置
SEKK_END:文件末尾
-
#include <stdio.h>
-
-
void main()
-
{
-
FILE *fp;
-
char *buf_w = "this is my string.";
-
char buf_r[10];
-
size_t ret;
-
-
fp = fopen("./test.c", "r+");
-
if(fp == NULL)
-
{
-
printf("file fopen failed!\n");
-
return;
-
}
-
-
ret = fwrite(buf_w, 18, 1, fp);
-
if(ret == 0)
-
{
-
printf("file fwrite failed!\n");
-
return;
-
}
-
-
fseek(fp,0,SEEK_SET);
-
-
ret = fread(buf_r,9,1,fp);
-
if(ret == 0)
-
{
-
printf("file fread failed!\n");
-
return;
-
}
-
else
-
{
-
buf_r[9] = '\0';
-
printf("fread buf is \"%s\"\n",buf_r);
-
}
-
close(fp);
-
}
阅读(690) | 评论(0) | 转发(0) |