免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7379 | 回复: 15

[C] 用fwrite,fread读写文件的问题! [复制链接]

论坛徽章:
0
发表于 2014-06-30 12:15 |显示全部楼层
我先简单描述一下我的操作与遇到的问题:
1.首先我把一个int型的二维数组以数据块的形式写入文件:
  1. FILE *fcache_plus = fopen(p_cache_file,"ab+");
  2. fwrite(plus,sizeof(int),num,fcache_plus);
复制代码
2.之后根据需要从这个文件中每次读出若干个字节写入数据库:
  1. pfile = fopen(fcache_file,"rb");
  2. fread(pptr,sizeof(int),num,pfile);
复制代码
可是我发现plus和pptr的数据不一致,还需要什么转换么?或者中间是不是缺少什么步骤。请大家指点一二!

论坛徽章:
323
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2014-06-30 13:07 |显示全部楼层
a+模式数据是追加写的,是不是原先文件中有数据?

论坛徽章:
0
发表于 2014-06-30 13:12 |显示全部楼层
读写不在同一个机器?字节序?

论坛徽章:
0
发表于 2014-06-30 13:15 |显示全部楼层
本帖最后由 xlwang_0903 于 2014-06-30 13:16 编辑

回复 2# hellioncu
因为会多次写同一个文件,所以用的a+。这里可能我写错了,实际我用的是ab+。在第一次写文件之前会新建文件,用完了也会删除此文件。


   

论坛徽章:
0
发表于 2014-06-30 13:15 |显示全部楼层
vime000 发表于 2014-06-30 13:12
读写不在同一个机器?字节序?


读写是在同一个机器。您提到的字节序指的是什么?

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-08 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-09-18 06:20:00数据库技术版块每周发帖之星
日期:2015-11-06 19:56:51数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00数据库技术版块每日发帖之星
日期:2016-02-05 06:20:00
发表于 2014-06-30 15:03 |显示全部楼层
本帖最后由 asdf2110 于 2014-06-30 15:05 编辑

plus 和 pptr 如何定义的?

malloc 的吗?

另外,中间 fseek 了吗?

回复 1# xlwang_0903


   

论坛徽章:
0
发表于 2014-06-30 16:10 |显示全部楼层
asdf2110 发表于 2014-06-30 15:03
plus 和 pptr 如何定义的?

malloc 的吗?


我好想发现了问题所在。我现在要做的事情:plus是一个100字节的的二维数组:int *plus[n],将其写入文件后。我需要从文件开始位置读出20字节,pptr是个整形的指针,int *pptr。我现在的错误在于不知道如何得到、或者解析这20字节的整形数据。

论坛徽章:
0
发表于 2014-06-30 16:39 |显示全部楼层
你把完整代码贴出来看看

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-08 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-09-18 06:20:00数据库技术版块每周发帖之星
日期:2015-11-06 19:56:51数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00数据库技术版块每日发帖之星
日期:2016-02-05 06:20:00
发表于 2014-06-30 16:54 |显示全部楼层
这样?
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <malloc.h>

  4. #define SIZE 5
  5. #define FILENAME "test.out"

  6. int main(int argc, char *argv[])
  7. {
  8.         int *plus[SIZE];
  9.         int *pptr, i, j;
  10.         FILE *fo = NULL, *fi = NULL;
  11.         for (i = 0; i < SIZE; i++)
  12.         {
  13.                 plus[i] = malloc(sizeof(int) * SIZE);
  14.         }
  15.         pptr = malloc(sizeof(int) * SIZE);

  16.         for (i = 0; i < SIZE; i++)
  17.         {
  18.                 for (j = 0; j < SIZE; j++)
  19.                         plus[i][j] = i + j;
  20.         }
  21.         memset(pptr, 0, sizeof(int) * SIZE);
  22.         fo = fopen(FILENAME, "ab+");
  23.         fwrite(plus[0], sizeof(int), SIZE, fo);
  24.         fclose(fo);
  25.        
  26.         fi = fopen(FILENAME, "rb");
  27.         fread(pptr, sizeof(int), SIZE, fi);
  28.         fclose(fi);

  29.         for(i=0;i<SIZE;i++)
  30.                 printf("%d\n",pptr[i]);
  31.         return 0;
  32. }
复制代码
输出:
  1. # ./a.out
  2. 0
  3. 1
  4. 2
  5. 3
  6. 4
复制代码
回复 7# xlwang_0903


   

论坛徽章:
0
发表于 2014-06-30 16:57 |显示全部楼层
westar 发表于 2014-06-30 16:39
你把完整代码贴出来看看


问题主要就在于fread,如何读出写在一个文件中的二维数组plus[m][n]的的plus[0][n],且plus[0][n]的字节数已知。因为我写文件的时候直接这么写了:
        fwrite(plus,sizeof(int),num,fcache_plus);
读出来我不会了……:
        fread(pptr,sizeof(int),p_num,pfile);
我不知道如何让pptr和plus的数据结构对应起来。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP