增,a+,尾部增加不需要变化,随机,排序用r+,
查询,修改用r+删除,读到内存或者其他文件,删除后,然后重写新文件。w+数据库原理,删除的时候填充为0位,积攒到一定程度,释放
- 向文件写入
1 void write_to_file() 2 { 3 //数据 4 double db[10] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 }; 5 //分配内存用于从文件读取 6 double *p = calloc(10, 8); 7 //以写读的方式打开文件 8 FILE *pf = fopen("C:\\db.bin", "w+"); 9 //写入数据10 fwrite(db, 8, 10, pf);11 //刷新缓冲区12 fflush(pf);13 //回到开头14 rewind(pf);15 //读取16 fread(p, 8, 10, pf);17 //关闭文件18 fclose(pf);19 for (int i = 0; i < 10;i++)20 {21 printf("\n%f", p[i]);22 }23 24 system("pause");25 }
- 文件尾部增加
1 //尾部增加 2 void add_back() 3 { 4 write_to_file(); 5 //用于读取文件到内存 6 double *p = calloc(11, 8); 7 //以追加模式打开文件 8 FILE *pf = fopen("C:\\db.bin", "a+"); 9 //定义新的数据10 double dbx = 19.5;11 //写入数据12 fwrite(&dbx, 8, 1, pf);13 //刷新缓冲区14 fflush(pf);15 //回到开头16 rewind(pf);17 //读取18 fread(p, 8, 11, pf);19 //关闭文件20 fclose(pf);21 //显示22 for (int i = 0; i < 11; i++)23 {24 printf("\n%f", p[i]);25 }26 27 system("pause");28 29 30 31 }
- 文件随机位置增加,插入
1 //随机增加,插入 2 void insert() 3 { 4 //读取文件块 5 { 6 //分配内存用于读取 7 double *p = calloc(11, 8); 8 //以读的方式打开文件 9 FILE *pf = fopen("C:\\db.bin", "r+");10 //读取11 fread(p, 8, 11, pf);12 //关闭文件13 fclose(pf);14 //显示15 for (int i = 0; i < 11; i++)16 {17 printf("\n%f", p[i]);18 }19 system("pause");20 }21 //插入22 {23 //以读写的方式打开文件24 FILE *pf = fopen("C:\\db.bin", "r+");25 //存储最后一个26 double db;27 //指针移动到最后一个元素位置28 fseek(pf, 8 * 9, SEEK_SET);29 //读取最后一个30 fread(&db, 8, 1, pf);31 32 //从最后一个开始依次把前面一个赋值给后面一个33 for (int i = 9; i >= 1;i--)34 {35 //当前位置的前一个元素36 double dbtmp;37 //指针移动到当前指针的前一个位置38 fseek(pf, 8 * (i-1), SEEK_SET);39 //读取40 fread(&dbtmp, 8, 1, pf);41 //指针移动到当前位置42 fseek(pf, 8 * i, SEEK_SET);43 //写入44 fwrite(&dbtmp, 8, 1, pf);45 }46 47 //文件移动到开头48 fseek(pf, 0, SEEK_SET);49 //写入50 fwrite(&db, 8, 1, pf);51 //关闭文件52 fclose(pf);53 }54 //读取55 {56 double *p = calloc(11, 8);57 //以读的方式打开文件58 FILE *pf = fopen("C:\\db.bin", "r+");59 //读取60 fread(p, 8, 11, pf);61 //关闭62 fclose(pf);63 //输出64 for (int i = 0; i < 11; i++)65 {66 printf("%f\n", p[i]);67 }68 }69 system("pause");70 }
- 文件查找
1 //查找 2 void find() 3 { 4 //以读写的方式打开文件 5 FILE *pf = fopen("C:\\db.bin", "r+"); 6 //要查找的元素 7 double db = 17.0; 8 //读取到的元素 9 double dbx;10 //标识是否找到11 int flag = 0;12 //依次遍历13 for (int i = 0; i < 11;i++)14 {15 fseek(pf, 8 * i, SEEK_SET);16 //读取17 fread(&dbx, 8, 1, pf);18 if (dbx==db)19 {20 flag = 1;21 break;22 }23 }24 if (flag)25 {26 printf("找到");27 } 28 else29 {30 printf("找不到");31 }32 33 fclose(pf);34 system("pause");35 }
- 修改
1 //修改 2 void change() 3 { 4 5 FILE *pf = fopen("C:\\db.bin", "r+"); 6 //要查找的元素 7 double db = 7.0; 8 //要改成的新的数据 9 double dbnew = 17.0;10 //用于读取11 double dbx;12 //标识是否找到13 int flag = 0;14 //遍历寻找15 for (int i = 0; i < 11; i++)16 {17 //读取18 fseek(pf, 8 * i, SEEK_SET);19 fread(&dbx, 8, 1, pf);20 if (dbx == db)21 {22 //移动到相应位置23 fseek(pf, 8 * i, SEEK_SET);24 //写入25 fwrite(&dbnew, 8, 1, pf);26 flag = 1;27 break;28 }29 30 }31 if (flag)32 {33 printf("找到");34 }35 else36 {37 printf("找不到");38 }39 40 fclose(pf);41 system("pause");42 }43 44 //删除45 void delete()46 {47 //分配内存用于读取48 double *p = calloc(11, 8);49 //读文件50 {51 FILE *pf = fopen("C:\\db.bin", "r+");52 fread(p, 8, 11, pf);53 fclose(pf);54 for (int i = 0; i < 11; i++)55 {56 printf("\n%f", p[i]);57 }58 }59 //写入文件60 {61 FILE *pf = fopen("C:\\db.bin", "w+");62 fwrite(p, 8, 10, pf);63 fclose(pf);64 }65 //读取文件66 {67 68 FILE *pf = fopen("C:\\db.bin", "r+");69 fread(p, 8, 10, pf);70 fclose(pf);71 for (int i = 0; i < 10; i++)72 {73 printf("\n%f", p[i]);74 }75 }76 77 getchar();78 }
完整代码
1 #define _CRT_SECURE_NO_WARNINGS 2 #include3 #include 4 5 //增,a+,尾部增加不需要变化,随机,排序用r+, 6 //查询,修改用r+ 7 //删除,读到内存或者其他文件,删除后,然后重写新文件。w+ 8 //数据库原理,删除的时候填充为0位,积攒到一定程度,释放 9 10 //向文件写入 11 void write_to_file() 12 { 13 //数据 14 double db[10] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 }; 15 //分配内存用于从文件读取 16 double *p = calloc(10, 8); 17 //以写读的方式打开文件 18 FILE *pf = fopen("C:\\db.bin", "w+"); 19 //写入数据 20 fwrite(db, 8, 10, pf); 21 //刷新缓冲区 22 fflush(pf); 23 //回到开头 24 rewind(pf); 25 //读取 26 fread(p, 8, 10, pf); 27 //关闭文件 28 fclose(pf); 29 for (int i = 0; i < 10;i++) 30 { 31 printf("\n%f", p[i]); 32 } 33 34 system("pause"); 35 } 36 37 38 //尾部增加 39 void add_back() 40 { 41 write_to_file(); 42 //用于读取文件到内存 43 double *p = calloc(11, 8); 44 //以追加模式打开文件 45 FILE *pf = fopen("C:\\db.bin", "a+"); 46 //定义新的数据 47 double dbx = 19.5; 48 //写入数据 49 fwrite(&dbx, 8, 1, pf); 50 //刷新缓冲区 51 fflush(pf); 52 //回到开头 53 rewind(pf); 54 //读取 55 fread(p, 8, 11, pf); 56 //关闭文件 57 fclose(pf); 58 //显示 59 for (int i = 0; i < 11; i++) 60 { 61 printf("\n%f", p[i]); 62 } 63 64 system("pause"); 65 66 67 68 } 69 70 //随机增加,插入 71 void insert() 72 { 73 //读取文件块 74 { 75 //分配内存用于读取 76 double *p = calloc(11, 8); 77 //以读的方式打开文件 78 FILE *pf = fopen("C:\\db.bin", "r+"); 79 //读取 80 fread(p, 8, 11, pf); 81 //关闭文件 82 fclose(pf); 83 //显示 84 for (int i = 0; i < 11; i++) 85 { 86 printf("\n%f", p[i]); 87 } 88 system("pause"); 89 } 90 //插入 91 { 92 //以读写的方式打开文件 93 FILE *pf = fopen("C:\\db.bin", "r+"); 94 //存储最后一个 95 double db; 96 //指针移动到最后一个元素位置 97 fseek(pf, 8 * 9, SEEK_SET); 98 //读取最后一个 99 fread(&db, 8, 1, pf);100 101 //从最后一个开始依次把前面一个赋值给后面一个102 for (int i = 9; i >= 1;i--)103 {104 //当前位置的前一个元素105 double dbtmp;106 //指针移动到当前指针的前一个位置107 fseek(pf, 8 * (i-1), SEEK_SET);108 //读取109 fread(&dbtmp, 8, 1, pf);110 //指针移动到当前位置111 fseek(pf, 8 * i, SEEK_SET);112 //写入113 fwrite(&dbtmp, 8, 1, pf);114 }115 116 //文件移动到开头117 fseek(pf, 0, SEEK_SET);118 //写入119 fwrite(&db, 8, 1, pf);120 //关闭文件121 fclose(pf);122 }123 //读取124 {125 double *p = calloc(11, 8);126 //以读的方式打开文件127 FILE *pf = fopen("C:\\db.bin", "r+");128 //读取129 fread(p, 8, 11, pf);130 //关闭131 fclose(pf);132 //输出133 for (int i = 0; i < 11; i++)134 {135 printf("%f\n", p[i]);136 }137 }138 system("pause");139 }140 141 //查找142 void find()143 {144 //以读写的方式打开文件145 FILE *pf = fopen("C:\\db.bin", "r+");146 //要查找的元素147 double db = 17.0;148 //读取到的元素149 double dbx;150 //标识是否找到151 int flag = 0;152 //依次遍历153 for (int i = 0; i < 11;i++)154 {155 fseek(pf, 8 * i, SEEK_SET);156 //读取157 fread(&dbx, 8, 1, pf);158 if (dbx==db)159 {160 flag = 1;161 break;162 }163 }164 if (flag)165 {166 printf("找到");167 } 168 else169 {170 printf("找不到");171 }172 173 fclose(pf);174 system("pause");175 }176 177 //修改178 void change()179 {180 181 FILE *pf = fopen("C:\\db.bin", "r+");182 //要查找的元素183 double db = 7.0;184 //要改成的新的数据185 double dbnew = 17.0;186 //用于读取187 double dbx;188 //标识是否找到189 int flag = 0;190 //遍历寻找191 for (int i = 0; i < 11; i++)192 {193 //读取194 fseek(pf, 8 * i, SEEK_SET);195 fread(&dbx, 8, 1, pf);196 if (dbx == db)197 {198 //移动到相应位置199 fseek(pf, 8 * i, SEEK_SET);200 //写入201 fwrite(&dbnew, 8, 1, pf);202 flag = 1;203 break;204 }205 206 }207 if (flag)208 {209 printf("找到");210 }211 else212 {213 printf("找不到");214 }215 216 fclose(pf);217 system("pause");218 }219 220 //删除221 void delete()222 {223 //分配内存用于读取224 double *p = calloc(11, 8);225 //读文件226 {227 FILE *pf = fopen("C:\\db.bin", "r+");228 fread(p, 8, 11, pf);229 fclose(pf);230 for (int i = 0; i < 11; i++)231 {232 printf("\n%f", p[i]);233 }234 }235 //写入文件236 {237 FILE *pf = fopen("C:\\db.bin", "w+");238 fwrite(p, 8, 10, pf);239 fclose(pf);240 }241 //读取文件242 {243 244 FILE *pf = fopen("C:\\db.bin", "r+");245 fread(p, 8, 10, pf);246 fclose(pf);247 for (int i = 0; i < 10; i++)248 {249 printf("\n%f", p[i]);250 }251 }252 253 getchar();254 }