C++学习(二十八)(C语言部分)之 文件操作
复习:
#define 定义一个宏
#include 文件包含
#if 条件
防止头文件重复包含
定义一个宏 判断宏是否定义 判断头文件是否包含
#define _stdio_h_
#include<stdio.h>
#pragma once 防止头文件重复包含 房子头文件的最前面
多文件 .h+*.cpp
函数声明放在 .h 函数定义放在同名的 .cpp中 cpp包含.h文件
用的时候包含.h 就可以用里面的函数
文件操作
保存在内存中地数据 不管程序结果 电脑关机 内存都会回收 数据不在了
需要保存数据---->文件操作
1.文件后缀 .txt .cpp .h .avi 取决于怎么打开这种文件 但里面的内容和格式(后缀)无关
fp = fopen("2.txt", "w"); //第一个参数 文件路径 第二个参数 打开方式
//r 用只读的方式打开文件 文件存在 打开成功 不存在 打开失败 fpnull
//w 用只写的方式打开文件 文件存在 就把文件清空 文件不存在就创建一个新文件
//a 用追加的方式打开文件 文件存在将内容追加到文件末尾 文件不存在就新建一个文件
//文件 1.文本文件 2.二进制文件
//不管什么文件都可以用txt方式打开
//文本文件是给人看的 一般来说不会有乱码
//二进制文件 给计算机看的 一般不是给人看的(看不懂)(大部分是二进制文件 视频 音乐)
//t 文本文件 rt 用只读防止打开文件 (默认)
//b 二进制文件 rb 用只读方式打开二进制文件
//+ 表示可读写文件 文件可以读也可以写
//wb+ 用只写的方式打开一个可读写的二进制文件
//wb+ ---->wb 只能读 wb+ 文件可读可写
//文件后缀可以随意写 不影响内容
//修改文件 读出来 内存中修改完成--->写回去
//rb 用只读的方式打开二进制文件 rw不存在
测试代码笔记如下:
1 #include<stdio.h> 2 3 int main() 4 { 5 file *fp;//fp file pointer 文件指针 6 if (fp == null) 7 { 8 printf("文件不存在:"); return 0;//直接退出 9 } 10 else 11 { 12 printf("文件打开"); 13 } 14 ///文件已经打开 写入数据 /读取数据 15 16 //写入数据 17 char arr[] = "你好世界"; 18 //char arr[]="12345678"; 19 #if 0 20 for (int i = 0; arr[i] != '\0'; ++i) 21 { 22 fputc(arr[i], fp); 23 } 24 fputc(0, fp);//写入一个字符到文件 char 一个字节的整型 25 #elif 1 26 fputs(arr, fp);//将字符串写入文件 写字符串的时候不会写入\0 27 //fputc('\0', fp); 28 //fputs(arr, fp);//将字符串写入文件 29 #else 30 #endif 31 32 fclose(fp);//关闭文件 (保存内容) 33 //remove 删除文件(用路径) 34 getchar(); 35 return 0; 36 } 37 38 //字符操作 fgetc fputc 39 //字符串 fgets fputs 40 //格式化写入写出 41 //fprintf fscanf 42 //printf("格式占位字符串%d",132) 43 //fprintf(fp,"格式占位字符串%d",123);//将内容写入文件 44 //fscanf 从文件中读取数据 45 //scanf("%d",&x); 46 //fscanf(fp,"%d",&x);//从文件中读取一个数据 赋值给x 47 48 49 //1.知道怎么写入的 就怎么读出来 50 51 //char arr[100]="5";// 52 53 54 //二进制文件读写方式 55 //结构体 用结构体大小作为单位读写 56 //使用字节作为单位(可能会乱码) 57 //可以用于任何类型的数据 58 //fread 读取 文件内容 59 //fwrite 写入文件
1 #include<stdio.h> 2 struct node 3 { 4 int x, y; 5 double z; 6 }; 7 int main() 8 { 9 file*fp = fopen("1.txt", "r"); 10 if (fp == null) return; 11 #if 0 12 for (int i = 0; i < 10; ++i) 13 { 14 printf("%c", fgetc(fp));//文件读取 15 } 16 #elif 1 17 char arr[100];//数组 稍大一点 18 fgets(arr,100,fp);//读取文件内容 将文件中的内容 读取到内存中/用文件中的内容给变量赋值 19 //第一个参数 数组名 第二个参数 数组大小 第三个 文件指针 20 // 实际上最多读取99个字符 +自动加的\0 21 //遇到文件末尾 或者遇到换行 提前结束读取 22 //遇到\0会提前结束 遇到空格不会提前结束 23 puts(arr);//打印字符串 24 #else 25 #endif 26 /* 27 关于文件读写 全部通过文件指针操作 28 文件内部指针说法 指向正在读/正在在写的位置 29 r 每次r打开 文件内部指针指向文件开头 30 w 也是指向文件开头 31 a 指向文件末尾 32 33 文件写的时候 文件指向文件末尾 如果这个时候要读写 会出错 34 文件 末尾 eof -1 35 36 */ 37 fclose(fp); 38 39 /**************文件2*********************/ 40 //file *fp2 = fopen("2.txt", "wb"); 41 //struct node brr[2] = { { 1, 23, 3.14 }, { 3, 4, 7.89 } }; 42 //fwrite(brr, sizeof(struct node), 2, fp2);//写入 43 //fclose(fp2); 44 45 //读取文件 46 file *fp2 = fopen("2.txt", "rb"); 47 //struct node brr[2] ; 48 //fread(brr, sizeof(struct node), 2, fp2);//读取 49 fseek(fp, 0, seek_end);//直接移动文件指针到达文件末尾 50 long offset = ftell(fp);//得到当前偏移量 51 printf("文件大小%ld", offset); 52 53 //fseek 通过偏移量移动文件指针 54 //中间的是偏移量 55 //后面 seek_set 文件开头 56 //seek_cur //文件指针的当前位置 57 //seek_end //文件末尾 58 59 //fseek移动文件指针的位置 是base+offset 60 61 fclose(fp2); 62 getchar(); 63 return 0; 64 }
附:
2019-03-28 21:30:57
下一篇: 在'for'循环中获取索引