1. 文件操作函数原型介绍
1 文件指针
FILE *fp1,*fp2;
2.打开文件
打开文件建立文件与文件指针之间的联系fopen函数
格式:FIile* fopen(“文件名”,“文件的打开方式”);
返回文件信息的首地址否则返回为NULL
FILE *fopen( const char * filename, const char * mode );
在这里,filename 是字符串,用来命名文件,访问模式 mode 的值可以是下列值中的一个:
模式 描述
r 打开一个已有的文本文件,允许读取文件。
w 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
a 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
r+ 打开一个文本文件,允许读写文件。
w+ 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
a+ 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。
如果处理的是二进制文件,则需使用下面的访问模式来取代上面的访问模式:
“rb”, “wb”, “ab”, “rb+”, “r+b”, “wb+”, “w+b”, “ab+”, “a+b”
3.文件关闭函数
关闭文件的相关的资源,从而防止文件数据的丢失。
fclose格式:
int fclose(FILE *fp)//返回值为0表示成功的关闭了文件。
4.按数据块方式读文件
fread()函数
unsign int fread(const char* ptr, unsign int size,unsign int n,FILE *fp)
fread(“数据块首地址”,“数据块的字节数”,“数据块的块数”,“文件指针”);
5.按数据块方式写文件
fwrite()函数
unsign int fwrite(const char* ptr, unsign int size,unsign int n,FILE *fp)
fwrite(“数据块首地址”,“数据块的字节数”,“数据块的块数”,“文件指针”);
2. 结构体-数据块读写操作
#include <stdio.h>
#include <sys/file.h>
#include <stdlib.h>
typedef struct student
{
char name[21];
int age;
int score;
char addr[51];
}stu;
#if 0
//写入
int main()
{
stu ss[3] = {
{ "阿道夫", 9, 10, "北京" },
{"松岛枫", 3, 1000, "南京"},
{"陈胜", 43, 1, "大同"},
};
FILE* fp = fopen("c.txt", "wb");
if (!fp)
{
printf("open file error\n");
return -1;
}
for (int i = 0; i < 3; i++) {
fwrite(&ss[i], sizeof(stu), 1, fp);
}
fclose(fp);
return 0;
}
#else
//读出
int main(void)
{
FILE* fp = fopen("c.txt", "rb");
if (!fp)
{
printf("open file error\n");
return -1;
}
stu* ss = (stu*)malloc(sizeof(stu)* 3);
int i = 0;
while (!feof(fp)) {
fread(&ss[i], sizeof(stu), 1, fp);
i++;
}
for (int i = 0; i < 3; i++) {
printf("姓名:%s\n", ss[i].name);
printf("年龄:%d\n", ss[i].age);
printf("成绩:%d\n", ss[i].score);
printf("地址:%s\n", ss[i].addr);
}
free(ss);
fclose(fp);
return 0;
}
#endif
3. 数组-数据块读写操作
#if 0
int main()
{
FILE* fp = fopen("c.txt", "wb");
if (!fp)
return -1;
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 10 };
fwrite(arr, sizeof(int), 9, fp);
fclose(fp);
return 0;
}
#else
//读出数组
int main()
{
FILE* fp = fopen("c.txt", "rb");
if (!fp)
return -1;
int arr[512] = { 0 };
fread(arr, sizeof(int), 512, fp);
for (int i = 0; i < 9; i++) {
printf("%d\n", arr[i]);
}
fclose(fp);
return 0;
}
#endif
3.整型数据-数据块读写操作
#if 0
int main()
{
FILE* fp = fopen("c.txt", "wb");
if (!fp)
return -1;
int a = 55678;
fwrite(&a, sizeof(int), 1, fp);
fclose(fp);
return 0;
}
#else
int main(void)
{
FILE* fp = fopen("c.txt", "rb");
if (!fp)
return -1;
int value;
fread(&value, sizeof(int), 1, fp);
printf("%d\n", value);
return 0;
}
#endif