C++中如何基于argv输入的文件名创建带额外后缀的新文件
C++ 给argv传入的文件名追加后缀生成新文件的实现方法
核心逻辑非常简单,不需要拆分原有文件名的扩展名,直接把要追加的后缀拼到原文件名的末尾即可,完全不需要处理原文件名的点、扩展名之类的判断逻辑。
实现步骤
- 首先做参数校验,确保用户确实传入了
argv[1],避免空指针访问 - 直接将原文件名(
argv[1])和要追加的后缀(比如.out)做字符串拼接 - 用拼接后的结果作为文件名创建文件即可
代码示例
通用兼容版本(不需要依赖C++17及以上新标准)
#include <iostream> #include <fstream> #include <string> int main(int argc, char* argv[]) { // 入参合法性校验 if (argc < 2) { std::cerr << "用法:" << argv[0] << " <输入文件名>" << std::endl; return 1; } // 直接拼接文件名,原文件名完整保留,追加.out后缀 std::string output_filename = std::string(argv[1]) + ".out"; // 创建并打开输出文件 std::ofstream out_file(output_filename); if (!out_file.is_open()) { std::cerr << "创建输出文件失败:" << output_filename << std::endl; return 1; } // 后续可自定义往文件中写入内容 out_file << "测试写入内容" << std::endl; out_file.close(); std::cout << "输出文件已生成:" << output_filename << std::endl; return 0; }
C++17及以上版本(使用std::filesystem兼容跨平台路径处理)
#include <iostream> #include <fstream> #include <filesystem> namespace fs = std::filesystem; int main(int argc, char* argv[]) { if (argc < 2) { std::cerr << "用法:" << argv[0] << " <输入文件名>" << std::endl; return 1; } fs::path input_path = argv[1]; // 直接追加后缀,自动兼容不同操作系统的路径格式 fs::path output_path = input_path.concat(".out"); std::ofstream out_file(output_path); if (!out_file.is_open()) { std::cerr << "创建输出文件失败:" << output_path << std::endl; return 1; } out_file << "测试写入内容" << std::endl; out_file.close(); return 0; }
如果你传入的是带路径的文件名(比如
./test/hello.txt),上面的两种写法都可以正常生成./test/hello.txt.out,不会破坏原有的路径结构。
内容的提问来源于stack exchange,提问作者aintme
相关产品推荐
相关产品推荐

