0

0

如何用c++实现文件拷贝 功能类似复制粘贴【IO操作实战】

裘德小鎮的故事

裘德小鎮的故事

发布时间:2026-01-09 13:22:02

|

623人浏览过

|

来源于php中文网

原创

C++文件拷贝推荐用ifstream+ofstream二进制分块读写:以ios::binary打开源目标文件,用8KB vector缓冲区循环read/write,检查good()和gcount()确保正确性。

如何用c++实现文件拷贝 功能类似复制粘贴【io操作实战】

用 C++ 实现文件拷贝,核心是读取源文件内容、写入目标文件,关键在于正确处理二进制数据、避免文本模式换行符转换、合理管理缓冲区和资源。标准库 足够完成,无需第三方库。

使用 ifstream + ofstream 逐块读写(推荐)

这是最常用、可控性强、内存友好的方式。以二进制模式打开文件,用固定大小缓冲区(如 8KB)分批读写,兼顾效率与安全性。

  • 源文件用 std::ifstreamstd::ios::binary 模式打开,检查是否成功
  • 目标文件用 std::ofstreamstd::ios::binary | std::ios::out 模式打开,自动覆盖同名文件
  • 定义 std::vector buffer(8192) 作为中转缓冲区
  • 循环调用 in.read(buffer.data(), buffer.size()),再用 out.write() 写出实际读取字节数(in.gcount()
  • 每次读取后检查 in.good()!in.eof(),确保读完且无错误

用 istreambuf_iterator 一行流式拷贝(简洁但需注意)

适合小文件或追求代码简洁的场景,利用流迭代器把整个文件“当作序列”复制,底层仍走缓冲,但封装更高级。

  • 声明 std::ifstream in("src.bin", std::ios::binary);std::ofstream out("dst.bin", std::ios::binary);
  • 直接写:out —— 这行就完成了全部拷贝
  • 优点是代码极简;缺点是无法控制缓冲大小,大文件可能临时占用较多内存(取决于实现),且错误反馈较弱
  • 务必检查 inout 的状态,例如 if (!in || !out) { /* 处理失败 */ }

跨平台路径与错误处理不能少

真实项目中,光拷贝逻辑不够,还要适配不同系统路径分隔符、报告具体错误原因。

立即学习C++免费学习笔记(深入)”;

雪鸮AI
雪鸮AI

高效便捷的智能绘图辅助工具,一键生成高质量效果图。

下载
  • 路径建议用 std::filesystem::path(C++17 起),它自动处理 /\\
  • std::filesystem::copy_file() 可直接替代手写逻辑(支持覆盖、跳过等选项),但本题要求“IO操作实战”,所以手动实现更有价值
  • 错误处理别只靠 if (!in),可结合 in.rdstate() 判断是打开失败、读取失败还是 EOF;用 std::strerror(errno) 获取系统级错误信息(需包含
  • 拷贝完成后,建议调用 out.flush() 并检查 out.bad() 确保数据真正落盘

完整可运行示例(带基础错误提示)

以下是一个健壮、注释清晰的最小可行实现:

#include 
#include 
#include 
#include 
#include 

bool copyFile(const std::string& src, const std::string& dst) { std::ifstream in(src, std::ios::binary); if (!in) { std::cerr << "打开源文件失败: " << src << " (" << std::strerror(errno) << ")\n"; return false; }

std::ofstream out(dst, std::ios::binary);
if (!out) {
    std::cerr zuojiankuohaophpcnzuojiankuohaophpcn "创建目标文件失败: " zuojiankuohaophpcnzuojiankuohaophpcn dst zuojiankuohaophpcnzuojiankuohaophpcn " (" zuojiankuohaophpcnzuojiankuohaophpcn std::strerror(errno) zuojiankuohaophpcnzuojiankuohaophpcn ")\n";
    return false;
}

std::vectorzuojiankuohaophpcncharyoujiankuohaophpcn buf(8192);
while (in.read(buf.data(), buf.size())) {
    out.write(buf.data(), buf.size());
}
// 处理剩余不足一整块的数据
if (in.gcount() youjiankuohaophpcn 0) {
    out.write(buf.data(), in.gcount());
}

if (!out) {
    std::cerr zuojiankuohaophpcnzuojiankuohaophpcn "写入目标文件失败: " zuojiankuohaophpcnzuojiankuohaophpcn dst zuojiankuohaophpcnzuojiankuohaophpcn "\n";
    return false;
}
return true;

}

调用时传入两个字符串路径即可,返回 true 表示成功。不复杂但容易忽略细节。

相关专题

更多
c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

3

2026.01.09

c++框架学习教程汇总
c++框架学习教程汇总

本专题整合了c++框架学习教程汇总,阅读专题下面的文章了解更多详细内容。

7

2026.01.09

学python好用的网站推荐
学python好用的网站推荐

本专题整合了python学习教程汇总,阅读专题下面的文章了解更多详细内容。

11

2026.01.09

学python网站汇总
学python网站汇总

本专题整合了学python网站汇总,阅读专题下面的文章了解更多详细内容。

1

2026.01.09

python学习网站
python学习网站

本专题整合了python学习相关推荐汇总,阅读专题下面的文章了解更多详细内容。

4

2026.01.09

俄罗斯手机浏览器地址汇总
俄罗斯手机浏览器地址汇总

汇总俄罗斯Yandex手机浏览器官方网址入口,涵盖国际版与俄语版,适配移动端访问,一键直达搜索、地图、新闻等核心服务。

9

2026.01.09

漫蛙稳定版地址大全
漫蛙稳定版地址大全

漫蛙稳定版地址大全汇总最新可用入口,包含漫蛙manwa漫画防走失官网链接,确保用户随时畅读海量正版漫画资源,建议收藏备用,避免因域名变动无法访问。

14

2026.01.09

php学习网站大全
php学习网站大全

精选多个优质PHP入门学习网站,涵盖教程、实战与文档,适合零基础到进阶开发者,助你高效掌握PHP编程。

2

2026.01.09

php网站搭建教程大全
php网站搭建教程大全

本合集专为零基础用户打造,涵盖PHP网站搭建全流程,从环境配置到实战开发,免费、易懂、系统化,助你快速入门建站!

6

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.5万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号