| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2040 人关注过本帖, 1 人收藏
标题:关于二进制文件的输入输出的函数fwrite()和fread()
只看楼主 加入收藏
John0826
Rank: 1
等 级:新手上路
帖 子:15
专家分:8
注 册:2014-2-19
结帖率:100%
收藏(1)
已结贴  问题点数:10 回复次数:12 
关于二进制文件的输入输出的函数fwrite()和fread()
#include <stdio.h>
#include <stdlib.h>
#define LEN 10
int main(void)
{
    int arr[LEN]={0,1,2,3,4,5,6,7,8,9};
    int arr_2[LEN];
   
    FILE *fp;
    if((fp=fopen("bin.txt","w+b"))==NULL)
    {
        fprintf(stderr,"can`t open bin.txt file");
        exit(EXIT_FAILURE);
    }
    if(fwrite(arr,sizeof(int),LEN,fp)!=LEN)
    {
        fprintf(stderr,"file write faile");
        exit(EXIT_FAILURE);
    }
    fread(arr_2,sizeof(int),LEN,fp);
    if(fclose(fp)!=0)
    {
        fprintf(stderr,"stream closing failed");
    }
   
    for(int i=0;i<LEN;i++)
    {
        printf(" %d ",arr_2[i]);
    }

        return 0;
}
这个程序的输出结果是:全部为0,arr_2这个数组的数据全是0,为什么?(我的编译器是C-Free).
搜索更多相关主题的帖子: include 二进制 write file 
2014-03-30 11:36
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
w方式应该是强制覆盖原文件

DO IT YOURSELF !
2014-03-30 11:42
fragileeye
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:107
专家分:387
注 册:2011-5-21
收藏
得分:3 
关闭后再读
2014-03-30 11:51
xkwy0000
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:107
专家分:441
注 册:2013-2-8
收藏
得分:0 
c语言的文件读写函数好几个版本,不规范。fwrite()和fread()
我以前用过,觉得别扭,不会用。
2014-03-30 12:16
John0826
Rank: 1
等 级:新手上路
帖 子:15
专家分:8
注 册:2014-2-19
收藏
得分:0 
回复 3楼 fragileeye
什么意思,我不太明白。能说清楚一点吗?
2014-03-30 19:14
John0826
Rank: 1
等 级:新手上路
帖 子:15
专家分:8
注 册:2014-2-19
收藏
得分:0 
回复 2楼 wp231957
用二进制打开方式的几个方式我都试过,结果一样的。如:"wb","wb+"等。。
2014-03-30 19:18
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:7 
#include <stdio.h>
#include <stdlib.h>
#define LEN 10
int main(void)
{
    int arr[LEN]={0,1,2,3,4,5,6,7,8,9};
    int arr_2[LEN];
   
    FILE *fp;
    if((fp=fopen("bin.txt","w+b"))==NULL)
    {
        fprintf(stderr,"can`t open bin.txt file");
        exit(EXIT_FAILURE);
    }
    if(fwrite(arr,sizeof(int),LEN,fp)!=LEN)
    {
        fprintf(stderr,"file write faile");
        exit(EXIT_FAILURE);
    }
    fseek(fp,0,0); //三楼的方法也可,但是频繁打开关闭文件 毕竟不太好
    fread(arr_2,sizeof(int),LEN,fp);
    if(fclose(fp)!=0)
    {
        fprintf(stderr,"stream closing failed");
    }
   
    for(int i=0;i<LEN;i++)
    {
        printf(" %d ",arr_2[i]);
    }

        return 0;
}

DO IT YOURSELF !
2014-03-30 19:26
John0826
Rank: 1
等 级:新手上路
帖 子:15
专家分:8
注 册:2014-2-19
收藏
得分:0 
回复 3楼 fragileeye
我懂你的所说的关闭后再读了,你的意思是先关闭fp然后再调用fread()函数进行读取,结果也出来了,不再是都是0的结果,但是怎么内容不是arr这个数组里的内容呢?我的想法是借助文件(二进制)来进行数组的复制,但是结果不是这样,怎么回事呢?
2014-03-30 19:31
John0826
Rank: 1
等 级:新手上路
帖 子:15
专家分:8
注 册:2014-2-19
收藏
得分:0 
回复 7楼 wp231957
谢谢,我从你的回答里找到了我想要的东西(用你的方法得到了我想要的结果),关于读写后需要注意文件流上的指针的已经发生了改变这个问题有了更深的体验和认识,我会在这上面继续深入的。
但是三楼刚刚给的关闭流的方法我试了一下,但是结果还是不对,好像关闭流还是没有对流上的文件指针进行重置样,具体为什么我也不清楚,你能具体说明一下吗?谢谢
2014-03-30 21:38
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用John0826在2014-3-30 21:38:03的发言:

谢谢,我从你的回答里找到了我想要的东西(用你的方法得到了我想要的结果),关于读写后需要注意文件流上的指针的已经发生了改变这个问题有了更深的体验和认识,我会在这上面继续深入的。
但是三楼刚刚给的关闭流的方法我试了一下,但是结果还是不对,好像关闭流还是没有对流上的文件指针进行重置样,具体为什么我也不清楚,你能具体说明一下吗?谢谢
我怀疑是你的打开文件方式不对  如果是读文件的话  一定要用r 而不要用w方式  总之  w 或者w+ 方式慎用

DO IT YOURSELF !
2014-03-30 21:45
快速回复:关于二进制文件的输入输出的函数fwrite()和fread()
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020849 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved