C语言:文件复制

文本文件复制:

cpp 复制代码
#include<stdio.h>


int main()
{
	FILE* pFile1 = NULL;
	FILE* pFile2 = NULL;

	fopen_s(&pFile1,"D:\\11111.txt","r");
	fopen_s(&pFile2,"D:\\222.txt", "w");

	char c;


	while((c=fgetc(pFile1))!=EOF)
	{
		fputc(c,pFile2);
	}



	fclose(pFile1);
	fclose(pFile2);
	return 0;
}

二进制文件复制:

cpp 复制代码
#include<stdio.h>



int main()
{
	FILE* pfile1 = NULL;
	FILE* pfile2 = NULL;

	fopen_s(&pfile1, "C:\\Users\\ljw\\Desktop\\WIN_20231103_17_32_35_Pro.jpg", "rb");//一张图片
	fopen_s(&pfile2, "d:\\abc.jpg", "wb");

	char buf[1024];

	while (fread(buf, 1, 1024, pfile1) > 0)//返回值>0代表读取成功
	{
		fwrite(buf, 1, 1024, pfile2);
	}

    fclose(pfile1);
    fclose(pfile2);

	return 0;
}

但在二进制文件复制这里我们会发现一个问题:那就是复制过来文件大小的大于原文件的大小。

cpp 复制代码
#include<stdio.h>



int main()
{
	FILE* pfile1 = NULL;
	FILE* pfile2 = NULL;

	fopen_s(&pfile1, "C:\\Users\\ljw\\Desktop\\WIN_20231103_17_32_35_Pro.jpg", "rb");
	fopen_s(&pfile2, "d:\\abc.jpg", "wb");

	char buf[1024];
	size_t nread,nwrite;

	while ((nread=fread(buf, 1, 1024, pfile1)) > 0)
	{
		nwrite=fwrite(buf, 1, 1024, pfile2);
		printf("%d %d\n", nread, nwrite);
        //发现最后一次读取不足1024,但写入仍为1024,因此造成
        //要解决此问题只需将nwrite=fwrite(buf, 1, 1024, pfile2);中的1024改为nread即可
	}
    
    fclose(pfile1);
    fclose(pfile2);

	return 0;
}
相关推荐
踏着七彩祥云的小丑6 小时前
pytest——Mark标记
开发语言·python·pytest
Dream of maid6 小时前
Python12(网络编程)
开发语言·网络·php
W23035765737 小时前
经典算法:最长上升子序列(LIS)深度解析 C++ 实现
开发语言·c++·算法
.Ashy.7 小时前
2026.4.11 蓝桥杯软件类C/C++ G组山东省赛 小记
c语言·c++·蓝桥杯
Y4090017 小时前
【多线程】线程安全(1)
java·开发语言·jvm
菜菜艾7 小时前
基于llama.cpp部署私有大模型
linux·运维·服务器·人工智能·ai·云计算·ai编程
重生的黑客7 小时前
Linux开发工具:条件编译、动静态库与 make/makefile 入门
linux·运维·服务器
2401_892070987 小时前
链栈(链式栈) 超详细实现(C 语言 + 逐行精讲)
c语言·数据结构·链栈
不爱吃炸鸡柳7 小时前
Python入门第一课:零基础认识Python + 环境搭建 + 基础语法精讲
开发语言·python
minji...8 小时前
Linux 线程同步与互斥(三) 生产者消费者模型,基于阻塞队列的生产者消费者模型的代码实现
linux·运维·服务器·开发语言·网络·c++·算法