答案:C++中复制文件可使用ifstream和ofstream逐字节或缓冲区读写,或C++17的filesystem::copy_file。示例包含错误检查,推荐根据编译器支持选择方法。

要将一个文件的内容完整复制到另一个文件,C++ 提供了多种方法,最常用的是使用 文件流(fstream) 逐字节或按块读取并写入。下面介绍一种简单、可靠且通用的做法。
使用 ifstream 和 ofstream 逐字节复制
这是最基本的方式,适合理解文件操作流程:
- 用 std::ifstream 打开源文件进行读取
- 用 std::ofstream 创建或打开目标文件进行写入
- 逐字节读取并写入,直到文件结束
示例代码:
住哪酒店分销联盟是住哪网提供的一个网络分销预订平台。加入该本台,您可以通过在您网站或博客上展示图片、文字链接或搜索框,只要通过您的展示预订并入住的订单,您将得到至少12元/间夜的佣金。 加入条件非常宽松,如您经营的是商业性质还是个人性质的网站,可以通过本站提供的API接口,建立一个频道,一方面丰富网站内容,另一方面增加网站收入;如果您在其它网站上有博客,可以通过文字和图片链接,只要通过您的链接预
#include#include int main() { std::ifstream src("source.txt", std::ios::binary); std::ofstream dest("destination.txt", std::ios::binary); if (!src || !dest) { std::cerr << "无法打开文件!\n"; return 1; } char byte; while (src.get(byte)) { dest.put(byte); } src.close(); dest.close(); std::cout << "文件复制完成。\n"; return 0; }
使用缓冲区批量复制(更高效)
对于大文件,逐字节复制效率较低。可以使用固定大小的缓冲区一次读取多个字节,显著提升速度。
立即学习“C++免费学习笔记(深入)”;
示例代码:
#include#include int main() { std::ifstream src("source.txt", std::ios::binary); std::ofstream dest("destination.txt", std::ios::binary); if (!src || !dest) { std::cerr << "无法打开文件!\n"; return 1; } char buffer[4096]; while (src.read(buffer, sizeof(buffer))) { dest.write(buffer, src.gcount()); } // 写入最后可能不足缓冲区大小的部分 dest.write(buffer, src.gcount()); src.close(); dest.close(); std::cout << "文件复制完成。\n"; return 0; }
使用 C++17 的 filesystem(仅复制操作)
如果你使用的是 C++17 或更高版本,可以直接使用 std::filesystem::copy_file,这是最简洁的方法。
示例代码:
#include#include int main() { try { std::filesystem::copy_file("source.txt", "destination.txt"); std::cout << "文件复制完成。\n"; } catch (const std::filesystem::filesystem_error& e) { std::cerr << "复制失败:" << e.what() << "\n"; } return 0; }
这种方法简洁安全,推荐在支持 C++17 的项目中使用。
基本上就这些。选择哪种方式取决于你的编译器支持和性能需求。手动流操作更灵活,filesystem 更方便。注意始终检查文件是否成功打开,避免静默失败。









