我在将文件的文本复制到另一个新文件时遇到问题。它打开,创建一个新文件,但没有任何内容。它没有复制第一个文件的文本。目前这是代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
char content[80];
char newcontent[80];
//Step 1: Open text files and check that they open//
FILE *fp1, *fp2;
fp1 = fopen("details.txt","r");
fp2 = fopen("copydetails.txt","w");
if(fp1 == NULL || fp2 == NULL)
{
printf("Error reading file\n");
exit(0);
}
printf("Files open correctly\n");
//Step 2: Get text from original file//
while(fgets(content, sizeof(content), fp1) !=NULL)
{
fputs (content, stdout);
strcpy (content, newcontent);
}
printf("%s", newcontent);
printf("Text retrieved from original file\n");
//Step 3: Copy text to new file//
while(fgets(content, sizeof(content), fp1) !=NULL)
{
fprintf(fp2, newcontent);
}
printf("file created and text copied to it");
//Step 4: Close both files and end program//
fclose(fp1);
fclose(fp2);
getch();
return 0;
}
答案 0 :(得分:1)
while(fgets(content, sizeof(content), fp1) !=NULL){
fprintf(fp2, "%s", content);
}
答案 1 :(得分:0)
您是否尝试使用write()函数?
只需打开新文件的文件描述符即可。 man写了更多信息。
答案 2 :(得分:0)
您的代码中存在一些错误。
strcpy (content, newcontent);
如果您想将文件内容存储在&#34; newcontent&#34;使用strcat()。 strcpy()将在每次调用时覆盖目标。除此之外,第一个参数应该是目的地。在这里,您试图覆盖刚刚从文件中读取的内容。使用strcat(newcontent,content);
因为我们要将文本连接到&#34; newcontent&#34;的初始值,所以声明被修改为char newcontent[80]=""
;
fprintf(fp2, newcontent);
添加格式说明符。你没有得到任何编译错误?还有一件事。您正在阅读源文件中的文本到&#34;内容&#34;并撰写&#34; newcontent&#34;的内容到目标文件。使用fprintf(fp2,"%s",content);
文件指针位置:第一次while循环后,文件位置指示符位于文件末尾。所以第二个while循环的主体甚至不会执行一次。使用rewind(fp1);
或fseek(fp1,0L,SEEK_SET);
将文件位置指示器恢复到开头。
请查看更正后的代码。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
char content[80];
char newcontent[80]=""; // Change 1: Initialize the array
//Step 1: Open text files and check that they open//
FILE *fp1, *fp2;
fp1 = fopen("details.txt","r");
fp2 = fopen("copydetails.txt","w");
if(fp1 == NULL || fp2 == NULL)
{
printf("Error reading file\n");
exit(0);
}
printf("Files open correctly\n");
//Step 2: Get text from original file//
while(fgets(content, sizeof(content), fp1) !=NULL)
{
fputs (content, stdout);
strcat (newcontent, content); // Change 2: Append the new line to "newcontent"
}
printf("%s", newcontent);
printf("\nText retrieved from original file\n");
fseek(fp1,0L,SEEK_SET); // Change 3: Bring file pointer to the beginning. May use rewind(fp1); also
//Step 3: Copy text to new file//
while(fgets(content, sizeof(content), fp1) !=NULL)
{
fprintf(fp2,"%s",content);
}
printf("file created and text copied to it");
//Step 4: Close both files and end program//
fclose(fp1);
fclose(fp2);
getch();
return 0;
}
&#13;