创建文件并将其内容复制到c语言的其他文件

时间:2013-06-18 18:39:56

标签: c file copy file-handling copying

我需要一个C程序将一个文件的内容复制到另一个文件以及以下条件:

1。)我们读取数据的文件可能存在也可能不存在。

2。)正在复制数据的文件可能存在也可能不存在。

如果文件存在,则应直接复制数据,如果文件不存在,则应该有一个选项来创建文件,在其中输入数据,然后将文件内容复制到另一个文件中。文件。

我制定了以下代码,

目前我的修改后的代码是:

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
void main()
{
 FILE *f1,*f2;
 char c;
 char name1[20],name2[20];
 clrscr();
 setvbuf(stdout, 0, _IONBF, 0);
 printf("\nEnter the source file name :");
 scanf("%s",name1);
 if((f1=fopen(name1,"r"))==NULL)
 {
  fclose(f1);
  f1=fopen(name1,"w");
  printf("\nThe specified file does not exist \nNew file will be created");
  printf("\nEnter the data for the new file : ");
  while((c=getchar())!=EOF)
  {
   putc(c,f1);
  }
  fclose(f1); 
 }
 f1=fopen(name1,"r");
 printf("\nEnter the destination file name :");
 scanf("%s",name2);
 f2=fopen(name2,"w+");
 while((c=getc(f1))!=EOF)
 {
  putc(c,f2);
 }
 rewind(f1);
 rewind(f2);
 printf("The data in the source file is :\n");
 while((c=getc(f1))!=EOF)
 {
  printf("%c",c);
 }
 printf("\nThe data in the destination file is :\n");
 while((c=getc(f2))!=EOF)
 {
  printf("%c",c);
 }
 fclose(f1);
 fclose(f2);
 fflush(stdin);
 getch();
}

但只有当源文件已存在时,程序才能正常工作。如果我创建一个新文件,则不会对目标文件名进行任何输入,并且目标文件文件中的数据为空。那我该怎么办呢?

我应该修改什么才能使其正常工作? 建议您选择任何代码......谢谢!

2 个答案:

答案 0 :(得分:0)

好吧,我在你的代码中看到了几个问题,但最重要的是表达式:

(c=getc(f1))!=EOF

将始终评估为true,因此您将运行无限循环。如果您阅读了getc文档,就会发现它会返回int而不是char

getc documentation

所以基本上你正在做的是将EOF(通常定义为-1的int截断为char时:{/ p>

c=getc(f1)  // At this point C = 255(0xFF) if getc returned EOF

然后在与c进行比较时将int提升为EOF,因为int很大 足以保持255,所做的比较是255!= -1,这总是正确的。

要解决此问题,只需将c声明为int

更多提示:

您可能还希望使用feof来确保它是文件结束条件,因为getc也会在其他错误条件下返回EOF

您可能希望在"\n"次调用中将printf移动到您的生命结束,以强制刷新标准输出。或者您也可以在程序开头添加:

setvbuf(stdout, 0, _IONBF, 0);

您似乎将文件名存储在name1name2中,因此您可能希望从fopen文件名中删除双引号,以便它实际使用它们。< / p>

当您打开name2时,您只使用写访问权限,但最后您尝试阅读并显示其内容,您可能希望使用"w+"作为访问模式。

当您尝试打印结果数据时,f2中的文件处理程序已经关闭。并且文件游标已经在文件末尾,因此您可能希望使用rewind,例如

//fclose(f2);
rewind(f1);
rewind(f2);
printf("The data in the source file is :\n");
 while((c=getc(f1))!=EOF)
 {
  printf("%c",c);
 }
 printf("The data in the destination file is :\n");
 while((c=getc(f2))!=EOF)
 {
  printf("%c",c);
 }
 fclose(f1);
 fclose(f2);

答案 1 :(得分:0)

最后成功的代码是:

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
void main()
{
 FILE *f1,*f2;
 char c;
 char name1[20],name2[20];
 clrscr();
 printf("\nEnter the source file name :");
 scanf("%s",name1);
 if((f1=fopen(name1,"r"))==NULL)
 {
  fclose(f1);
  f1=fopen(name1,"w");
  printf("\nThe specified file does not exist \nNew file will be created");
  printf("\nEnter the data for the new file : ");
  while((c=getchar())!='^')
  {
   putc(c,f1);
  }
  fclose(f1); 
 }
 f1=fopen(name1,"r");
 printf("\nEnter the destination file name :");
 scanf("%s",name2);
 f2=fopen(name2,"w+");
 while((c=getc(f1))!=EOF)
 {
  putc(c,f2);
 }
 rewind(f1);
 rewind(f2);
 printf("The data in the source file is :\n");
 while((c=getc(f1))!=EOF)
 {
  printf("%c",c);
 }
 printf("\nThe data in the destination file is :\n");
 while((c=getc(f2))!=EOF)
 {
  printf("%c",c);
 }
 fclose(f1);
 fclose(f2);
 fflush(stdin);
 getch();
}