| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1608 人关注过本帖
标题:为什么不能合并文件?
只看楼主 加入收藏
keepc
Rank: 1
等 级:禁止访问
帖 子:61
专家分:9
注 册:2009-11-15
结帖率:76.92%
收藏
已结贴  问题点数:5 回复次数:12 
为什么不能合并文件?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SIZE 50

char *input_sData(char *ps,int n);
void output_sData(char *ps,int n);
void WriteFile(char *ps,char *sName,int n);
void catFile(char *srcName,char *dstName);


int main(int argc,char *argv[])
{
 char buffer[SIZE];
 int  len;

 input_sData(buffer,SIZE);
 len = strlen(buffer);
 WriteFile(buffer,"mike.dat",len);
 input_sData(buffer,SIZE);
 len = strlen(buffer);
 WriteFile(buffer,"mike1.dat",len);
 catFile("mike.dat","mike1.dat");

 return 0;
}
/*
** 输入数据
*/
char *input_sData(char *ps,int n)
{
 int  i;
 int  ch;
 
 i = 0;
 while((i < n - 1) && (ch = getchar()) != EOF && ch != '\n')
  ps[i++] = ch;

 ps[i] = '\0';

 return ps;

}

/*
** 写文件
*/
void WriteFile(char *ps,char *sName,int n)
{
 FILE *fp = NULL;

 if((fp = fopen(sName,"w")) == NULL)
 {
  printf("Can't open file %s\n",sName);
  exit(1);

 }
 else
 {
  fwrite(ps,sizeof(char),n,fp);
  fclose(fp);
 }

}
/*
** 合并文件
*/
void catFile(char *srcName,char *dstName)
{
 FILE *fps = NULL;
 FILE *fpd = NULL;
 int  ch;

 if((fps = fopen(srcName,"r")) == NULL)
 {
  printf("Can't open file %s\n",srcName);
  exit(1);

 }
 else
 {
  fseek(fps,1,SEEK_END);
 }
 if((fpd = fopen(dstName,"r")) == NULL)
 {
  printf("Can't open file %s\n",dstName);
  exit(1);
 }

 while( (ch = fgetc(fpd)) != EOF)
   fputc(ch,fps);

 fclose(fps);
 fclose(fpd);


}



文件不能合并。

例: mike.dat  内容:123

    mike1.dat 内容: abc



catFile("mike.dat","mike1.dat") 之后,文件不能合并?



怎么回事呢?
搜索更多相关主题的帖子: 文件 
2009-12-31 13:44
zhangxf1989
Rank: 6Rank: 6
等 级:侠之大者
帖 子:96
专家分:419
注 册:2009-9-5
收藏
得分:1 
fps = fopen(srcName,"r")你用只读模式打开文件自然不能向文件里面写东西
2009-12-31 14:19
keepc
Rank: 1
等 级:禁止访问
帖 子:61
专家分:9
注 册:2009-11-15
收藏
得分:0 
恩,谢谢楼上的。

怎么移动文件指针呢?

fseek(fps,1,SEEK_END);

打开fps这个文件,想让文件指针指到末尾
2009-12-31 14:27
zhangxf1989
Rank: 6Rank: 6
等 级:侠之大者
帖 子:96
专家分:419
注 册:2009-9-5
收藏
得分:0 
用fseek(fps,0,2);即可将文件指针移到文件尾
int fseek( FILE *stream, long offset, int origin );
第一个参数stream为文件指针,offset为偏移,比如你要从文件的第10000个字节开始读取的话,offset就应该为10000,origin 为标志是从文件开始还是末尾。
origin 的取值:
SEEK_CUR 文件指针的当前位置,即1
SEEK_END 文件末尾,即2
SEEK_SET 文件开始,即0


[ 本帖最后由 zhangxf1989 于 2009-12-31 14:47 编辑 ]
2009-12-31 14:38
keepc
Rank: 1
等 级:禁止访问
帖 子:61
专家分:9
注 册:2009-11-15
收藏
得分:0 
以下是引用zhangxf1989在2009-12-31 14:38:45的发言:

用fseek(fps,0,2);
0代表什么?
2代表什么?
2009-12-31 14:42
keepc
Rank: 1
等 级:禁止访问
帖 子:61
专家分:9
注 册:2009-11-15
收藏
得分:0 
if((fps = fopen(srcName,"r")) == NULL)    // 改成 "a+"才可以在文件尾追加。如果改成 "w",成追加不了。
{
  printf("Can't open file %s\n",srcName);
  exit(1);

}
else
{
  fseek(fps,0,SEEK_END);  //移动文件指针到末尾,不起作用??
}

怎么移动文件指针到文件尾?
2009-12-31 14:45
zhangxf1989
Rank: 6Rank: 6
等 级:侠之大者
帖 子:96
专家分:419
注 册:2009-9-5
收藏
得分:0 
我看看
2009-12-31 14:52
zhangxf1989
Rank: 6Rank: 6
等 级:侠之大者
帖 子:96
专家分:419
注 册:2009-9-5
收藏
得分:0 
我用的是C-FREE,刚才写了下面一个小程序试了一下可以啊!
#include<stdio.h>
#include<stdlib.h>

int main()
{
    FILE *fp;
   
    fp=fopen("abc.txt","a+");
    fseek(fp,0l,SEEK_END);
    fprintf(fp,"abckfjdks");
    fclose(fp);
    return 1;
}
2009-12-31 14:59
keepc
Rank: 1
等 级:禁止访问
帖 子:61
专家分:9
注 册:2009-11-15
收藏
得分:0 
如果不用"a+",打开文件,怎么移动到文件尾
2009-12-31 16:39
指手画脚
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:334
专家分:560
注 册:2009-12-28
收藏
得分:1 
fseek(fp,0l,SEEK_END);还是fseek(fp,-1l,SEEK_END);
忘了 你自己试试吧
去买菜去 你加油~

世界很简单 是非很复杂
有些东西是你的 但是你质疑的多了 可能就不是你的了
2009-12-31 17:02
快速回复:为什么不能合并文件?
数据加载中...
 
   



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

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