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;
}
相关推荐
疯狂飙车的蜗牛1 小时前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
2401_857439691 小时前
SSM 架构下 Vue 电脑测评系统:为电脑性能评估赋能
开发语言·php
SoraLuna2 小时前
「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台
开发语言·macos·ui·华为·harmonyos
xlsw_2 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
Dream_Snowar3 小时前
速通Python 第三节
开发语言·python
远游客07133 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<3 小时前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟3 小时前
centos-stream9系统安装docker
linux·docker·centos
唐诺3 小时前
几种广泛使用的 C++ 编译器
c++·编译器
XH华3 小时前
初识C语言之二维数组(下)
c语言·算法