博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
107.为什么要使用数据库之文件增删查改直接操作
阅读量:4703 次
发布时间:2019-06-10

本文共 9993 字,大约阅读时间需要 33 分钟。


增,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 #include
3 #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 }

 

转载于:https://www.cnblogs.com/xiaochi/p/8503886.html

你可能感兴趣的文章
Android:interpolator用法
查看>>
集合和函数
查看>>
thinkPHP5 验证码
查看>>
『摄影欣赏』25幅记录欢乐瞬间的精美照片【组图】
查看>>
一款效果精致的 jQuery 多层滑出菜单插件
查看>>
推荐10个 CSS3 制作的创意下拉菜单效果
查看>>
dubbo搭建
查看>>
【最大费用最大流】【Codeforces】164C - Machine Programming
查看>>
TCP系列52—拥塞控制—15、前向重传与RACK重传拥塞控制处理对比
查看>>
SQL Server手工插入标识列
查看>>
[每日一题] 11gOCP 1z0-052 :2013-09-15 Enterprise Manager Support Workbench..................B9
查看>>
为什么VS提示SurfFeatureDetector不是cv的成员函数
查看>>
Linux内核二层数据包接收流程
查看>>
别名、数组
查看>>
leetcode 9 Palindrome Number 回文数
查看>>
OpenCV特征点检测------Surf(特征点篇)
查看>>
parse,tryparse区别
查看>>
【WebRTC】简介
查看>>
MYSQL
查看>>
oracle 表空间创建和删除
查看>>