增,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 else 29 { 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 else 36 { 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 #include<stdio.h> 3 #include <stdlib.h> 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 else 169 { 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 else 212 { 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 }