| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1264 人关注过本帖
标题:为什么文件追加写不进去嘞
只看楼主 加入收藏
颜寻
Rank: 2
来 自:ccnu
等 级:论坛游民
帖 子:74
专家分:32
注 册:2014-12-27
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:25 
为什么文件追加写不进去嘞
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define  W  128   //每次读写文件的数据量

int    FileSet=0;      //定义一个整型变量, 用于保存fseek函数的返回值
int     FileEnd=0;    //整个文件的字节数
int     FileLength=0;  //文件的数据长度
short InputData[W];   //文件读写数据缓冲区

main()
{
 FILE *Ifp,*Ofp; //定义文件读写指针
 Ifp = fopen("f:\\exam.wav","rb");   
 Ofp = fopen("f:\\ProcessedFile.wav","ab");
 FileSet=fseek(Ifp,0L,SEEK_SET);    /*将指针移到文件开始处*/
 fseek(Ifp,0L,SEEK_END);    /*将指针移到文件尾*/
 FileEnd=ftell(Ifp);    /*获取exam.wav文件的字节数*/
 FileLength=FileEnd/2;    /*文件的数据长度*/
 rewind(Ifp);    /*将指针重新指到exam.wav文件开头*/
 while(FileLength>=W)    /*文件剩余的数据长度不小于W时,继续循环处理*/
 {
  fread(InputData,sizeof(short),W,Ifp);    /*从exam.wav文件中读取W个short(16比特)数据,保存到InputData数组*/
  fwrite(InputData,sizeof(short),W,Ofp);    /*将InputData数组中的W个short数据写入到ProcessedFile.wav文件中*/
  FileLength-=W; //刷新剩余的文件长度
 }
 fread(InputData,sizeof(short),FileLength,Ifp);    /*从exam.wav文件中读取剩余的数据,保存到InputData数组*/
 fwrite(InputData,sizeof(short),FileLength,Ofp);    /*将InputData数组中的数据写入到ProcessedFile.wav文件中*/
 fclose(Ifp);    /*关闭读文件*/
 fclose(Ofp);    /*关闭写文件*/

}
搜索更多相关主题的帖子: 缓冲区 include 
2015-01-23 14:13
颜寻
Rank: 2
来 自:ccnu
等 级:论坛游民
帖 子:74
专家分:32
注 册:2014-12-27
收藏
得分:0 
用wb就能实现用ab就做不到了吗

......................................既然琴瑟起,何以笙箫默
2015-01-23 14:17
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
你的注释跟代码不符,自己骗自己而已。看清楚实际的代码对什么文件在读、在写。

授人以渔,不授人以鱼。
2015-01-23 14:37
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
实话实说:这个代码我运行正常,一模一样的文件写出来了。编译环境vc++6,加的#include "StdAfx.h"才能通过编译。

能编个毛线衣吗?
2015-01-23 15:03
颜寻
Rank: 2
来 自:ccnu
等 级:论坛游民
帖 子:74
专家分:32
注 册:2014-12-27
收藏
得分:0 
回复 4楼 wmf2014
我不是要写一模一样的文件啊,我是要把一个文件加入另一个文件里

......................................既然琴瑟起,何以笙箫默
2015-01-23 15:13
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 4楼 wmf2014
需不需 #include "StdAfx.h",只取决于你是不是设置你的这个VC工程使用了 PCH(预编译头)。

建议不要用PCH,因为
你拷贝别人代码后,还得加上#include "StdAfx.h",你烦;
别人拷贝你代码后,还得删除#include "StdAfx.h",别人烦。
2015-01-23 15:13
颜寻
Rank: 2
来 自:ccnu
等 级:论坛游民
帖 子:74
专家分:32
注 册:2014-12-27
收藏
得分:0 
回复 3楼 TonyDeng
读的是WAV文件啊,注释跟代码怎么不符合呢?

......................................既然琴瑟起,何以笙箫默
2015-01-23 15:14
颜寻
Rank: 2
来 自:ccnu
等 级:论坛游民
帖 子:74
专家分:32
注 册:2014-12-27
收藏
得分:0 
回复 6楼 rjsp
不懂(@_@;),不过我没加那个也运行的了

......................................既然琴瑟起,何以笙箫默
2015-01-23 15:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
既然运行正常,何来“追加不了”的问题?

授人以渔,不授人以鱼。
2015-01-23 15:52
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:10 
回复 8楼 颜寻
wav 文件能直接拼接吗?我觉得应该有个文件描述头,直接拼接是无效的。
当然了,我只是瞎猜猜而已。

对于你的代码,你没描述一下怎么个“追加写不进去”,别人也无法瞎猜。
要不,错误时,你多加点儿输出信息,比如
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define FILENM_IN "f:\\exam.wav"
#define FILENM_OUT "f:\\ProcessedFile.wav"
#define BUFFERSIZE 4096

int main()
{
    FILE *ip, *op;

    ip = fopen( FILENM_IN, "rb" );
    if( !ip )
    {
        printf( "\"%s\" failed to open.", FILENM_IN );
        return 1;
    }

    op = fopen( FILENM_OUT, "ab" );
    if( !op )
    {
        printf( "\"%s\" failed to open.", FILENM_OUT );
        fclose( ip );
        return 2;
    }

    fpos_t pos;
    fgetpos( op, &pos ); // 记下这个位置是为了一旦追加内容失败后,还能有机会还原

    char buf[BUFFERSIZE];
    for( size_t n; n=fread(buf,1,BUFFERSIZE,ip), n>0; )
    {
        if( n != fwrite(buf,1,n,op) )
            break;
    }
    if( ferror(ip) || ferror(op) )
    {
        printf( "failed to copy." );

        ftruncate( fileno(op), pos ); // 还原,但这个函数不属于C标准库,而是posix

        fclose( op );
        fclose( ip );
        return 3;
    }

    fclose( op );
    fclose( ip );
    return 0;
}

2015-01-23 15:55
快速回复:为什么文件追加写不进去嘞
数据加载中...
 
   



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

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