【问题标题】:How do I copy content of one file to another如何将一个文件的内容复制到另一个文件
【发布时间】:2019-07-08 15:25:07
【问题描述】:

这是我的文件复制代码:

void main()
{
    char c;
    FILE *fptr1, *fptr2;

    fptr1=fopen("abc.docx","r");
    fptr2=fopen("paste_here.docx","w");

    c=fgetc(fptr1);
    while (c!=EOF)
    {
        putc(c,fptr2);
        c=fgetc(fptr1);
    }
    fclose(fptr1);
    fclose(fptr2);
}

我希望内容会被复制,但每当我在运行此程序后尝试打开 paste_here.docx 文件时,它都会说由于内容存在问题而无法打开该文件。

【问题讨论】:

  • fgetc() 有意返回int
  • 输出文件的大小是否正确?您应该将char c; 定义为int c;,而0xFF 的数据值可能导致循环过早结束。
  • 改用freadfwrite,逐个字符读取/写入字符效率非常低。 Youz 还应该缩进你的代码(就像你的 C 教科书中的示例一样)
  • 并没有说你是否使用Miscosoft编译器,但是如果你是,你必须在复制文件时指定文件读/写模式,二进制模式"rb""wb"防止看起来像(但不是)行尾字符的数据被转换。

标签: c file


【解决方案1】:

以上代码在 GCC 编译器上运行良好。但是,这不应该依赖于编译器。

这里有两种类型的文件数据

1 - 易于读写的文本文件。

2 - 具有复杂和加密信息的二进制文件。

建议:

对于文本文件,我们建议您使用 fprintf() 和 fscanf() 函数进行读写操作。

对于二进制文件,我们建议您使用 fread() 和 fwrite() 函数进行读写操作。

【讨论】:

  • “具有复杂和加密信息的二进制文件”这一事实与问题无关。 OP 只想复制一个文件,无论它是二进制文件还是文本文件或任何文件。
  • 我对这一切都很陌生,所以我不太了解二进制文件是什么。我的初始代码仅适用于 .txt 文件。但是当我在 rb 和 wb 模式下打开一个 .docx 文件时,相同的代码可以工作。多谢。如果您能向我解释为什么会发生这种情况,那就太好了。我也可以对 .xls 文件执行相同的操作吗?
  • @KashviGandhi 请参考下面的链接,以便更好地理解 'r' 和 rb' stackoverflow.com/questions/2174889/… for 'w' 和 'wb' stackoverflow.com/questions/43777913/… 希望你能从这里得到这个想法。如果您认为上述帖子适合您,请支持此答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 2022-11-24
  • 2021-09-02
相关资源
最近更新 更多