You need to enable JavaScript to run this app. C++中如何基于argv输入的文件名创建带额外后缀的新文件
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 05:45:05