1.存取文本文件
有关知识:fwrite:把内存的数据写在文件
求字符串长度用函数strlen()
int main()
{
FILE* fw = fopen("D:\\4.txt", "wb");//w访问文本文件,wb访问二进制文件和文本文件
assert(fw != NULL);
const char* str = "hello world";
fwrite(str, sizeof(char), strlen(str), fw);//strlen()用来计算字符串长度
fclose(fw);
}
2.读取文本数据
有关知识:fread:把文件的数据读到内存,返回值很重要,通常需要定义同类型的变量来保存文件的数据
int main()
{
FILE* fr = fopen("D:\\4.txt", "rb");
assert(fr != NULL);
char buf[100]="";//加""是为了加\0
int len=fread(buf, sizeof(char), 100, fr);
printf("%d %s", len, buf);
fclose(fr);
return 0;
}
3.把整形数组的数据写到文件
有关知识:求整形数组长度用sizeof(arr)/sizeof(arr[0])
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
FILE* fw = fopen("D:\\2.txt", "wb");
assert(fw != NULL);
fwrite(arr, sizeof(int), sizeof(arr) / sizeof(arr[0]), fw);//strlen用来求字符串长度,sizeof(arr)/sizeof(arr[0])
fclose(fw);
return 0;
}
4.从二进制文件中读取数据,并输出到屏幕
有关知识:用for循环输出数组
int main()
{
FILE* fr = fopen("D:\\2.txt", "rb");
assert(fr != NULL);
int buf;//第一种方法
int len;
while (len = fread(&buf, sizeof(int), 1, fr) > 0)
{
printf("%d ",buf);//buf时一个一个输出的
}
//fclose(fr);
//int buf[10];//第二种方法
//int len=fread(buf, sizeof(int), 10, fr);
//for (int i = 0; i < len; i++)
//{
// printf("%d ", buf[i]);//输出整形数组
//}
//return 0;
}
5.定义学生结构,把学生信息存到文件中,并且从屏幕中输出
typedef struct Student
{
char name[10];
int age;
}Student;
//从键盘中取学生信息
void Input(Student* ps, int len)
{
for (int i = 0; i < len; i++)
{
scanf("%s %d", &ps[i].name, &ps[i].age);
}
}
//把学生信息保存到文件中
void Save(Student* ps, int len)
{
const char* path = "D:\\stu.txt";
FILE* fw = fopen(path, "wb");
assert(fw != NULL);
fwrite(ps, sizeof(Student), len, fw);//ps是数组不用加&,ps指向学生数据,一个数据类型的为Student
fclose(fw);
}
//把文件的内容输出到屏幕
void Show()
{
const char* path = "D:\\stu.txt";
FILE* fr = fopen(path, "rb");
assert(fr != NULL);
Student stu;//相当于定义一个buf来存放学生数据
printf("输出学生信息:\n");
while (fread(&stu, sizeof(Student), 1, fr) > 0)
{
printf("%s %d\n", stu.name, stu.age);
}
fclose(fr);
}
int main()
{
Student arr[5];
Input(arr, sizeof(arr) / sizeof(arr[0]));
Save(arr, sizeof(arr) / sizeof(arr[0]));
Show();
}
6.文件的复制
oid FILECopy(const char* despath, const char* srcpath)
{
FILE* fr = fopen(srcpath, "rb");
FILE* fw = fopen(despath, "wb");
assert(fr != NULL && fw != NULL);
char buf[100];
int len;
while (len=fread(buf, sizeof(char), 100, fr) > 0)
{
fwrite(buf, sizeof(char), len, fw);
}
fclose(fr);
fclose(fw);
}
int main()
{
FILECopy("D:\\2.cpp", "D:\\1.cpp");
}