使用C编程语言将文本文件的内容复制到另一个文本文件中

时间:2014-04-03 11:36:52

标签: c

我在将文件的文本复制到另一个新文件时遇到问题。它打开,创建一个新文件,但没有任何内容。它没有复制第一个文件的文本。目前这是代码:

#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;
}

3 个答案:

答案 0 :(得分:1)

while(fgets(content, sizeof(content), fp1) !=NULL){
    fprintf(fp2, "%s", content);
}

答案 1 :(得分:0)

您是否尝试使用write()函数?

只需打开新文件的文件描述符即可。 man写了更多信息。

答案 2 :(得分:0)

您的代码中存在一些错误。

  1. strcpy (content, newcontent);

    如果您想将文件内容存储在&#34; newcontent&#34;使用strcat()。 strcpy()将在每次调用时覆盖目标。除此之外,第一个参数应该是目的地。在这里,您试图覆盖刚刚从文件中读取的内容。使用strcat(newcontent,content);因为我们要将文本连接到&#34; newcontent&#34;的初始值,所以声明被修改为char newcontent[80]="";

  2. fprintf(fp2, newcontent); 添加格式说明符。你没有得到任何编译错误?还有一件事。您正在阅读源文件中的文本到&#34;内容&#34;并撰写&#34; newcontent&#34;的内容到目标文件。使用fprintf(fp2,"%s",content);

  3. 文件指针位置:第一次while循环后,文件位置指示符位于文件末尾。所以第二个while循环的主体甚至不会执行一次。使用rewind(fp1);fseek(fp1,0L,SEEK_SET);将文件位置指示器恢复到开头。

  4. 请查看更正后的代码。

    &#13;
    &#13;
    #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;
    &#13;
    &#13;