107.为什么要使用数据库之文件增删查改直接操作

Posted 喵小喵~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了107.为什么要使用数据库之文件增删查改直接操作相关的知识,希望对你有一定的参考价值。


增,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 }

 

以上是关于107.为什么要使用数据库之文件增删查改直接操作的主要内容,如果未能解决你的问题,请参考以下文章

Unity 文件操作之文件的增删查改

EAS开发之对已有单据的增删查改功能开发

数据结构之单链表的增删查改等操作画图详解

php怎么对文件内容进行增删查改?

数据结构:二叉搜索树的增删查改

数据结构:二叉搜索树的增删查改