文件的常见操作
#include<stdio.h>
// 由于devc++代码编码为ANCI,故读取的文件中若有中文,请设置文件编码为ANCI,否则会乱码
// 读文件
void test1() {
char ch;
FILE *fp; // 创建文件指针
fp = fopen("./file.txt", "r"); // 读取文件
while((ch=fgetc(fp))!= EOF) { // 访问文件中数据
putchar(ch); //输出文件中字符
}
fclose(fp); // 关闭文件
}
// 写单个字符到文件中
void test2() {
char ch;
FILE *fp; // 创建文件指针
fp = fopen("./file.txt", "r+");
if (fp == NULL) {
perror("Failed to open file");
return;
}
// fputc(): 写单个字符
fputc('a', fp);
rewind(fp); // 将文件指针移动到文件开头
while ((ch = fgetc(fp)) != EOF) { // 访问文件中数据
putchar(ch); // 输出文件中字符
}
fclose(fp); // 关闭文件
}
// 写一个字符串到文件
void test3() {
char in[50], out[50];
FILE *fp = fopen("./file.txt", "w+"); // w+每次都会清空文件重新写
// 写入文件
gets(in);
fputs(in, fp);
// 读取文件,首先将文件指针移动到文件头
rewind(fp);
fgets(out, 50, fp);
puts(out);
fclose(fp); // 关闭文件
}
// 格式化写入文件
void test4() {
int i = 3;
float f = 4.50;
FILE *fp = fopen("./file.txt", "w+");
fprintf(fp, "%d, %6.2f",i,f); // 格式化写入文件
fscanf(fp, "%d, %f", i, f);
printf("%d %f",i ,f);
fclose(fp); // 关闭文件
}
// 二进制读写文件
void test5() {
float arr[5] = {1,2,3,4,5};
float res[5];
FILE *fp = fopen("./file.dat", "wb+"); // ------注意这里使用是wb+才可以对二进制文件操作
// 向文件写入一个数据块 arr是float类型的数组,每个元素占4字节,总共十个元素
// 这里表示把整个数组都写入文件中
fwrite(arr, sizeof(float), 5,fp);
rewind(fp);
// 从文件中读取一个数据块
fread(res, sizeof(float), 5, fp);
// 输出一下文件中内容,也就是res数组中读取的内容
for (int i=0; i<5; i++) {
printf("%f ", res[i]);
}
fclose(fp); // 关闭文件
}
int main() {
// test1();
// test2();
// test3();
// test4();
test5();
return 0;
}