复制 文件内容到 另一个文件

huanhuan30 2009-01-07 03:49:43
作业要求 :用 参数和fread()fwrite() 完成
输入 : 程序名字 目标文本 原文本1 原文本2 原文本n (n >= 1)
目标: 将 原文本1 原文本2 原文本n (n >= 1) 的内容复制到 目标文本当中

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUFF 1024
void append (FILE *, FILE *);
int main (int argc, char *argv[])
{
int i;
FILE *target, *source;
if (argc <= 3)
{
printf("format: filename target_fliename source_f1 source_f2 source_fn......\n");
exit(EXIT_FAILURE);
}
if ((target = fopen(argv[1], "a")) == NULL)
{
printf("Can't open %s \n", argv[1]);
exit(EXIT_FAILURE);
}
for (i = 2; i < argc; i++)
{
if (strcmp(argv[i], argv[1]) == 0)
{
printf("%s is the same to the target.\n", argv[i]);
continue;
}
else if ((source = fopen(argv[i], "r")) == NULL)
{
printf("Can't open %s \n", argv[i]);
exit(EXIT_FAILURE);
}
else
append(source, target);
fclose(source);
}
fclose(target);
return 0;
}
void append (FILE *source, FILE *target)
{
size_t byte;
static char temp[BUFF];
if ((byte =fread(temp, sizeof(char), BUFF, source)) > 0)
{
fwrite(temp, sizeof(char), BUFF, target);
}
}


不知道哪里错了,总是不能复制文本中的第二行的内容。。而且 保存后 打开目标文本,文本的内容很乱。。
...全文
104 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 huanhuan30 的回复:]
C/C++ codevoid append (FILE *source, FILE *target)
{
size_t byte;
static char temp[BUFF];
if ((byte =fread(temp, sizeof(char), BUFF, source)) > 0)
{
fwrite(temp, sizeof(char), BUFF, target); //BUFF 改成 byte 就好了。。晕死。谁能告诉我为什么?
}
}
[/Quote]

fwrite是从temp地址开始,写sizeof(char)*BUFF大小的字节到target文件指针指向buf里!

所以,如果你本身内容没有那么多,那么fwrite还是会从内存里读取那么大的内容写入,所以会出乱码!

故,应该用byte

fread返回的是读取字节数!
ckt 2009-01-07
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUFF 1024
void append (FILE *, FILE *);
int main (int argc, char *argv[])//argv第一个参数为exe的路径,由系统写入
{
int i;
FILE *target, *source;
if (argc <= 3)
{
printf("format: filename target_fliename source_f1 source_f2 source_fn......\n");
exit(EXIT_FAILURE);
}
if ((target = fopen(argv[2], "a")) == NULL)
{
printf("Can't open %s \n", argv[1]);
exit(EXIT_FAILURE);
}
for (i = 3; i < argc; i++)// target_fliename 为第四个参数,
{
if (strcmp(argv[i], argv[2]) == 0)
{
printf("%s is the same to the target.\n", argv[i]);
continue;
}
else if ((source = fopen(argv[i], "r")) == NULL)
{
printf("Can't open %s \n", argv[i]);
exit(EXIT_FAILURE);
}
else
append(source, target);
fclose(source);
}
fclose(target);
return 0;
}
void append (FILE *source, FILE *target)
{
size_t byte;
static char temp[BUFF];
if ((byte = fread(temp, sizeof(char), BUFF, source)) > 0)
{
//fwrite(temp, sizeof(char), BUFF, target);//应写入实际读取到的字节数,到尾部可能读取的内容小于缓存大小
fwrite(temp, sizeof(char), byte, target);
}
}

hai040 2009-01-07
  • 打赏
  • 举报
回复
fread返回实际读取的大小
写的时候当然要写byte
huanhuan30 2009-01-07
  • 打赏
  • 举报
回复
void append (FILE *source, FILE *target)
{
size_t byte;
static char temp[BUFF];
if ((byte =fread(temp, sizeof(char), BUFF, source)) > 0)
{
fwrite(temp, sizeof(char), BUFF, target); //BUFF 改成 byte 就好了。。晕死。谁能告诉我为什么?
}
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧