文件 复制问题

huanhuan30 2009-01-06 05:31:19
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
FILE *in, *out;
char ch;
if (argc != 3)
{
fprintf(stderr, "filename source target...\n");
exit(EXIT_FAILURE);
}
if ((in = fopen(argv[1], "rb")) == NULL)
{
fprintf(stderr, "Can't open %s \n", argv[1]);
exit(EXIT_FAILURE);
}
if ((out = fopen(argv[2], "wb")) == NULL)
{
fprintf(stderr, "Can't open %s \n", argv[1]);
exit(EXIT_FAILURE);
}
while ((ch = getc(in)) != EOF)
{
putc(ch, out);
}
fclose(in);
fclose(out);
return 0;
}

为什么 不能用来 复制 exe 文件。。。。。。
...全文
53 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ckt1120 的回复:]
char类型的byte,如读到一个值超过char取值范围的数,会被进行转换.
如读到了255,赋值给byte后则为-1,退出循环.
int类型的byte则不会
[/Quote]

呵呵,够细心,没看到这定义不一样~~~
ckt 2009-01-06
  • 打赏
  • 举报
回复
char类型的byte,如读到一个值超过char取值范围的数,会被进行转换.
如读到了255,赋值给byte后则为-1,退出循环.
int类型的byte则不会
太乙 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 huanhuan30 的回复:]
C/C++ code#include <stdio.h>

#include <stdlib.h>

//#include <console.h> /* Macintosh adjustment */





int main(int argc, char *argv[])

{

int byte;

FILE * source;

FILE * target;



// argc = ccommand(&argv); /* Macintosh adjustment */



if (argc != 3)

{

printf("Usage: %s sourcefile targetfile\n", argv[0]);


[/Quote]

没区别啊!!!
huanhuan30 2009-01-06
  • 打赏
  • 举报
回复
#include <stdio.h>

#include <stdlib.h>

//#include <console.h> /* Macintosh adjustment */





int main(int argc, char *argv[])

{

int byte;

FILE * source;

FILE * target;



// argc = ccommand(&argv); /* Macintosh adjustment */



if (argc != 3)

{

printf("Usage: %s sourcefile targetfile\n", argv[0]);

exit(EXIT_FAILURE);

}





if ((source = fopen(argv[1], "rb")) == NULL)

{

printf("Could not open file %s for input\n", argv[1]);

exit(EXIT_FAILURE);

}

if ((target = fopen(argv[2], "wb")) == NULL)

{

printf("Could not open file %s for output\n", argv[2]);

exit(EXIT_FAILURE);

}

while ((byte = getc(source)) != EOF)

{

putc(byte, target);

}

if (fclose(source) != 0)

printf("Could not close file %s\n", argv[1]);

if (fclose(target) != 0)

printf("Could not close file %s\n", argv[2]);



return 0;

}

维护什么这个 可以。。复制后 的 exe 仍然可以用,,和我那个 有区别吗???
ckt 2009-01-06
  • 打赏
  • 举报
回复
你可以直接用api CopyFile
ckt 2009-01-06
  • 打赏
  • 举报
回复
你不能以EOF作为结束标准

#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
FILE *in, *out;
char sData[32] = {0};
int iRet = 0;
if (argc != 3)
{
fprintf(stderr, "filename source target...\n");
exit(EXIT_FAILURE);
}
if ((in = fopen(argv[1], "rb")) == NULL)
{
fprintf(stderr, "Can't open %s \n", argv[1]);
exit(EXIT_FAILURE);
}

if ((out = fopen(argv[2], "wb")) == NULL)
{
fprintf(stderr, "Can't open %s \n", argv[2]);// argv[1] -> argv[2]
exit(EXIT_FAILURE);
}
while (true)// 读完整个文件
{
iRet = fread(sData, 1, sizeof(sData), in);
if (iRet == 0)
break;
fwrite(sData, 1, iRet, out);
}
fclose(in);
fclose(out);
return 0;
}
huanhuan30 2009-01-06
  • 打赏
  • 举报
回复
不可以的。。。输出的 EXE 不能 运行了。。。。
lann64 2009-01-06
  • 打赏
  • 举报
回复
可以呀,不过最好使用unsigned char类型

69,372

社区成员

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

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