• c++ 批量修改文件名


    在网上找了很久如何利用c++批量修改文件名,但是很不幸,找到的都不全,或者跑起来没效果。我就整合了以下批量修改文件名的代码(我跑完之后,文件名并没有改,好奇怪,你们可以试着找一下错误,我感觉没有错啊,为啥改不了。欢迎在评论区解惑)。

    int rename_main(){
        std::vector<std::string> mesh_dir;
        std::vector<std::string> keypoint_dir;
        std::vector<std::string> obj_dir;
        std::string m = "/Users/wpx/Documents/data/nose_validata/mesh";
        std::string key = "/Users/wpx/Documents/data/nose_validata/keypoint";
        std::string o = "/Users/wpx/Documents/data/nose_validata/obj";
        std::string output_root = "/Users/wpx/Documents/data/nose_validata/output_obj";
        mesh_dir = getFilesList(m);
        keypoint_dir = getFilesList(key);
        obj_dir = getFilesList(o);
        for (int k=0; k<mesh_dir.size(); k++){
            std::string mesh_name     =  mesh_dir.at(k);
            std::string keypoint_name = keypoint_dir.at(k);
            std::string obj_name      = obj_dir.at(k);
            std::string keypoint_path = "/Users/wpx/Documents/data/nose_validata/keypoint/" + keypoint_name;
            std::string mesh_path     = "/Users/wpx/Documents/data/nose_validata/mesh/" + mesh_name;
            std::string obj_path     = o + "/" + obj_name;
            // 我需要删除文件名中的“_keypoint” 和文件名中的“_mesh”
            int pos_key = keypoint_path.find("_keypoint");  //找到 "_keypoint"位置下标,因为需要截断
            int pos_mesh = mesh_path.find("_mesh");  // 类似上面
            std::string sub_file_key = keypoint_path.substr(pos_key, 9);  // 从pos_key开始,数9个字符,因为_keypoint 是9个
            std::string sub_file_mesh = mesh_path.substr(pos_mesh, 5);  //同上
            // std::cout<<"pos:"<<sub_file_key<<std::endl;
            // std::cout<<"mesh:"<<sub_file_mesh<<std::endl;
            std::string new_key = keypoint_path.replace(pos_key, 9, "");  // 找到_keypoint之后,替换为空字符
            std::string new_mesh = mesh_path.replace(pos_mesh, 5, ""); // 同上
            std::cout<<new_key<<std::endl;
            if (!rename(keypoint_path.c_str(), new_key.c_str()))  // 之后利用c++中的rename方法,进行修改,结果修改错误,娘希匹,搞不定了。
            {
                std::cout << "rename success "<< std::endl;
            }
            else
            {
                std::cout << "rename error "<< std::endl;
            }
    
            if (!rename(mesh_path.c_str(), new_mesh.c_str()))
            {
                std::cout << "rename success "<< std::endl;
            }
            else
            {
                std::cout << "rename error "<< std::endl;
            }
        
        }
        return 0;
    }
    

      

  • 相关阅读:
    JSP中<base href="<%=basePath%>">作用
    转 jdk1.5新特性 ConcurrentHashMap
    单例设计模式与类加载顺序详解
    归并排序-java
    插入排序-java
    冒泡排序-java
    选择排序-java
    JS的object数据类型
    JS的事件
    JS的捕捉回车键
  • 原文地址:https://www.cnblogs.com/peixu/p/16599169.html
Copyright © 2020-2023  润新知