一、打开文件
1.1 fopen函数
FILE* fopen(“文件名”, “打开方式”); ——头文件是stdio.h
fopen函数,有两个字符串参数,第一个是要打开的文件名,第二个是打开的方式
返回值为FILE*,也就是文件指针;打开文件的时候会自动创建一个文件指针和一个结构体,里面包含了文件的基本信息。通过文件指针,可以把文件当成流来进行输入输出的操作。
#include <stdio.h>
int main()
{
FILE* fr = fopen("test.txt", "r"); //以读的方式打开文件,并将返回的文件指针放到fr;
if (NULL == fr) //fopen函数可能会打开文件失败,此时返回一个NULL空指针,需要对pr进行非空判断
{
perror("read test.txt");
}
else
{
char c = fgetc(fr); //从fr里面读取一个字符放到c里面
}
//文件使用结束后需要关闭
fclose(fr);
fr = NULL; //关闭文件后将fr置空
return 0;
}
其中,打开方式有如下几种
1.2 读写函数
fputc(character, stream)
fgetc(steam)
fputs(string*, stream)
fgets(string*, stream)
fprintf(stream, “%d %s %f”, a, s, f)
fscanf(steam “%d %s %f”, &a, s, &f)
fwrite(buffer*, size, count , stream)
fread(buffer*, size, count, stream)
1.3 文件指针移动函数
1.3.1 fseek(stream, offset, orgin)
对stream从orgin开始,偏移offset个字节,下次使用上面的输入输出函数是,指针则指向偏移后的位置
1.3.2 ftell(stream)
获取当前指针相对于文件首地址偏移量
1.3.3 rewind(stream)
将当前指针回到文件首地址
1.4 文件结束判断函数feof(stream)
用于文件读取结束后,判断是读取完整个文件结束,还是读取错误导致结束
struct S
{
int a;
char c;
float f;
char str[20];
};
struct S s = { 19, 'f', 3.15, "zhangsan" };
struct S s1;
FILE* fw = fopen("test1.txt", "wb");
if (NULL == fw)
{
perror("write test1.txt");
}
fwrite(&s, sizeof(struct S), 1, fw);
fclose(fw);
fw = NULL;
FILE* fr = fopen("test1.txt", "rb");
if (NULL == fr)
{
perror("read test1.txt");
}
while (fread(&s1, sizeof(struct S), 10, fr))
{
printf("%d %c %f %s\n", s1.a, s1.c, s1.f, s1.str);
}
if (ferror(fr))
{
printf("end error");
}
else if (feof(fr))
{
printf("end successfully");
}
fclose(fr);
fr = NULL;