使用 fwrite 在 C 中复制文件

标签 c file-io copy fwrite

我是 C 的新手,正在尝试编写一个程序来复制文件,以便我可以学习文件的基础知识。我的代码将一个文件作为输入,通过使用 fseek 和 ftell 从文件的结尾减去文件的开头来计算出文件的长度。然后,根据我从其手册页中获得的内容,它使用 fwrite 将一个数据元素((END - START)元素长)写入 OUT 指向的流,从 FI 给出的位置获取它们。问题是,虽然它确实产生“复制输出”,但文件与原始文件不同。我究竟做错了什么?我尝试将输入文件读入一个变量,然后从那里写入,但这也无济于事。我究竟做错了什么? 谢谢

int main(int argc, char* argv[])
{ 
    FILE* fi = fopen(argv[1], "r"); //create the input file for reading

    if (fi == NULL)
        return 1; // check file exists

    int start = ftell(fi); // get file start address

    fseek(fi, 0, SEEK_END); // go to end of file

    int end = ftell(fi); // get file end address

    rewind(fi); // go back to file beginning

    FILE* out = fopen("copy output", "w"); // create the output file for writing

    fwrite(fi,end-start,1,out); // write the input file to the output file
}

这应该行得通吗?

{
    FILE* out = fopen("copy output", "w");
    int* buf = malloc(end-start);  fread(buf,end-start,1,fi);
    fwrite(buf,end-start,1,out);
}

最佳答案

这不是fwrite有效。

要复制文件,您通常会分配一个缓冲区,然后使用 fread 读取一个数据缓冲区,然后使用 fwrite 将数据写回。重复直到复制了整个文件。典型代码是这样的一般顺序:

#define SIZE (1024*1024)

char buffer[SIZE];
size_t bytes;

while (0 < (bytes = fread(buffer, 1, sizeof(buffer), infile)))
    fwrite(buffer, 1, bytes, outfile);

关于使用 fwrite 在 C 中复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14150431/

相关文章:

java - Java 中的文件 I/O

java - Java中用Scanner读取文本文件——Token的返回字符

c - 在比较两个文件的程序中使用多个不同的参数

linux - 递归复制X文件夹深度linux

linux - 复制和粘贴文件

c - 在 VS2010 上用 Visual C++ 编写 C 代码

python - PyObject* 的 "String"表示的生命周期

c - 在 C 中使用 MPI_Type_vector 接收

c - 退出时清理线程

java - JFrame如何自行刷新?