其实最让人恐惧的不是年龄的递增,而是随着年龄的增长,你的知识、能力、头脑、眼光、存款都没有随之增长。。。
---- 网易云热评
1、写文件
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 5}, size = 0;
FILE *p_file = fopen("a.bin", "wb");
if (p_file) {
size = fwrite(arr/*内存里第一个存储区的地址*/, sizeof(int)/*单个存储区的大小*/, 5/*希望操作的存储区个数*/, p_file/*文件指针*/);
printf("size是%d\n", size);
fclose(p_file);
p_file = NULL;
}
return 0;
}
#include <stdio.h>
int main() {
int arr[][5] = {1, 1, 1, 1, 1,
2, 2, 2, 2, 2,
3, 3, 3, 3, 3,
4, 4, 4, 4, 4,
5, 5, 5, 5, 5};
int size = 0;
FILE *p_file = fopen("b.bin", "wb");
if (p_file) {
size = fwrite(arr, sizeof(int), 25, p_file);
printf("size是%d\n", size);
fclose(p_file);
p_file = NULL;
}
return 0;
}
2、读文件
#include <stdio.h>
int main() {
int arr[5] = {0}, size = 0, num = 0;
FILE *p_file = fopen("a.bin", "rb");
if (p_file) {
size = fread(arr, sizeof(int), 10, p_file); //希望从文件里获得10个整数并记录到arr数组里,返回值代表实际得到的数字个数
printf("size是%d\n", size);
for (num = 0;num <= 4;num++) {
printf("%d ", arr[num]);
}
printf("\n");
fclose(p_file);
p_file = NULL;
}
return 0;
}
#include <stdio.h>
int main() {
int arr[5][5] = {0};
int num = 0, row = 0, col = 0;
FILE *p_file = fopen("b.bin", "rb");
if (p_file) {
//循环变量从最后一组的组下标4
//变到最前一组的组下标0
//每次循环从文件里获得5个整数并
//记录到循环变量做组下标的那一组
//存储区里
for (num = 4;num >= 0;num--) {
fread(arr[num]/*组下标为num这一组里第一个存储区的地址*/, sizeof(int), 5, p_file);
}
for (row = 0;row <= 4;row++) {
for (col = 0;col <= 4;col++) {
printf("%d", arr[row][col]);
}
printf("\n");
}
fclose(p_file);
p_file = NULL;
}
return 0;
}
3、文本文件操作
fprintf函数可以把数字记录到文本文件里,这个函数的第一个参数是一个文件指针,后面的参数就是printf函数的参数
fscanf函数可以从文本文件里获得数字并记录,到存储区里,这个函数的第一个参数是一个文件指针,后面的参数就是scanf函数的参数
这两个函数不适合处理数据量大的文件
#include <stdio.h>
int main() {
int arr[] = {40, 72, 5, 631, 3871};
int num = 0;
FILE *p_file = fopen("a.txt", "w");
if (p_file) {
for (num = 0;num <= 4;num++) {
//printf("%d ", arr[num]);
fprintf(p_file, "%d ", arr[num]);
}
fclose(p_file);
p_file = NULL;
}
return 0;
}
#include <stdio.h>
int main() {
int val = 0, num = 0;
FILE *p_file = fopen("a.txt", "r");
if (p_file) {
for (num = 1;num <= 5;num++) {
//scanf("%d", &val);
fscanf(p_file, "%d", &val);
printf("%d ", val);
}
printf("\n");
fclose(p_file);
p_file = NULL;
}
return 0;
}
4、位置指针操作
如果目标位置在基准位置后距离用非负数表示
如果目标位置在基准位置前距离用负数表示
#include <stdio.h>
int main() {
char ch = 0;
FILE *p_file = fopen("abc.txt", "rb");
if (p_file) {
//rewind(p_file); //把位置指针设置到文件开头
fseek(p_file, 3, SEEK_SET/*把文件头作为基准位置*/); //把位置指针设置到文件头开始向后3个字节的位置
printf("%ld\n", ftell(p_file)/*获得位置指针的数值*/);
fread(&ch, sizeof(char), 1, p_file);
printf("ch是%c\n", ch);
//rewind(p_file); //把位置指针设置到文件开头
fseek(p_file, 2, SEEK_CUR/*把当前位置作为基准位置*/); //把位置指针设置到当前位置向后2个字节的地方
printf("%ld\n", ftell(p_file)/*获得位置指针的数值*/);
fread(&ch, sizeof(char), 1, p_file);
printf("ch是%c\n", ch);
//rewind(p_file); //把位置指针设置到文件开头
fseek(p_file, -3, SEEK_END/*把文件尾作为基准位置*/); //把位置指针设置到文件尾向前3个字节的位置
printf("%ld\n", ftell(p_file)/*获得位置指针的数值*/);
fread(&ch, sizeof(char), 1, p_file);
printf("ch是%c\n", ch);
fclose(p_file);
p_file = NULL;
}
return 0;
}
5、复制文件
#include <stdio.h>
int main(int argc, char **argv) {
int size = 0;
char buf[100] = {0}; //记录从原始文件里得到的数字
FILE *p_src = NULL/*代表原始文件*/, *p_dest = NULL/*代表目标文件*/;
if (argc < 3) {
//命令里没有包含必要的路径
printf("命令错误\n");
return 0;
}
p_src = fopen(*(argv + 1)/*下标为1的指针指向的字符串,这个字符串的内容就是路径一*/, "rb"); //打开原始文件
if (!p_src) {
//处理原始文件打开失败的情况
printf("原始文件打开失败\n");
return 0;
}
p_dest = fopen(*(argv + 2)/*下标为2的指针指向的字符串,这个字符串的内容就是路径二*/, "wb"); //打开目标文件
if (!p_dest) {
//处理目标文件打开失败的情况
printf("目标文件打开失败\n");
fclose(p_src); //关闭原始文件
p_src = NULL;
return 0;
}
while (1) {
//每循环一次从原始文件里获得100个字节
//并记录到目标文件里
size = fread(buf, sizeof(char), 100, p_src); //从原始文件里获得100个字节放到buf数组里,size变量记录实际从原始文件里获得的字节个数
if (!size) {
//处理没有从原始文件里获得数字的情况
break;
}
fwrite(buf, sizeof(char), size, p_dest); //把buf数组里的数字记录到目标文件里,每次只把从原始文件里获得的数据记录到目标文件里
}
fclose(p_dest); //关闭目标文件
p_dest = NULL;
fclose(p_src); //关闭原始文件
p_src = NULL;
return 0;
}
欢迎关注公众号:顺便编点程