#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Stu
{
char name[50];
int id;
}Stu;
void my_fwrite(char* path)
{
FILE* fp = NULL;
//"w+",读写方式打开,如果文件不存在,则创建\
如果文件存在,清空内容,再写
fp = fopen(path, "w+");
if (fp == NULL)
{
//函数参数只能是字符串
perror("my_fwrite fopen");
return;
}
Stu s[3];
int i = 0;
char buf[50];
for (i = 0; i < 3; i++)
{
sprintf(buf, "stu%d%d%d", i, i, i);
strcpy(s[i].name, buf);
s[i].id = i + 1;
}
//按块写文件
//s: 写入文件内容的内存首地址
//sizeof(Stu): 块的大小
//3: 块数, 写文件数据的大小 = sizeof(Stu) * 3
//fp: 文件指针
//返回值,成功写入文件的块数目
int ret = fwrite(s, sizeof(Stu), 3, fp);
printf("ret = %d\n", ret);
if (fp != NULL)
{
fclose(fp);
fp = NULL;
}
}
void my_fread(char* path)
{
FILE* fp = NULL;
//读写方式打开,如果文件不存在,打开失败
fp = fopen(path, "r+");
if (fp == NULL)
{
perror("my_fread fopen");
return;
}
Stu s[3];
Stu tmp;//读第3个结构体
fseek(fp, 2 * sizeof(Stu), SEEK_SET);
//fseek(fp, -1 * sizeof(Stu), SEEK_END);
int ret = fread(&tmp, sizeof(Stu), 1, fp);
if (ret == 1)
{
printf("[tmp]%s, %d\n", tmp.name, tmp.id);
}
//把文件光标移动到最开始的地方
//fseek(fp, 0, SEEK_SET);
rewind(fp);
//按块读文件
//s: 写入文件内容的内存首地址
//sizeof(Stu): 块的大小
//3: 块数, 读文件数据的大小 = sizeof(Stu) * 3
//fp: 文件指针
//返回值,成功读取文件的块数目
ret = fread(s, sizeof(Stu), 3, fp);
printf("ret = %d\n", ret);
int i;
for (i = 0; i < 3; i++)
{
printf("s[%d] = %s, %d\n", i, s[i].name, s[i].id);
}
if (fp != NULL)
{
fclose(fp);
fp = NULL;
}
}
int main(void)
{
my_fwrite("../006.txt");//上一级地址
my_fread("../006.txt");
printf("\n");
system("pause");
return 0;
}
C语言 随机位置读文件
最新推荐文章于 2021-05-23 19:35:23 发布