zoukankan      html  css  js  c++  java
  • 批量重命名文件

    前言

    实现代码的过程中经常需要将文件夹中的所有文件进行重命名,以方便对文件进行处理。

    实现过程

    1.测试代码;

    /************************************************************************
    * Copyright(c) 2017  AMY
    * All rights reserved.
    *
    * File:    
    * Brief: 
    * Version: 1.0
    * Author: 
    * Email: happyamyhope@163.com
    * Date:    2017/10/27
    * History:
    * 20171027: ;
    
    ************************************************************************/
    //-------------------------------------------------------------------------
    #include <iostream>
    #include <string>
    #include <vector>
    #include "opencv2/opencv.hpp"
    #include "opencv2/contrib/contrib.hpp"
    using namespace std;
    
    int main()
    {
        string oldFolder = "E:\fatigue_detection\dataset\img\";
        string oldType = "*.jpg";
        bool addPath = true;
        cv::Directory dir;
        vector<string> filenames = dir.GetListFiles(oldFolder, oldType, addPath);
        string newName;
        string oldName;
        string newType = ".png";
        for (int i = 0; i < filenames.size(); i++)
        {
            oldName = filenames[i];
            newName = oldFolder + to_string(i) + newType;
            ////method1
            //char *oldNamePointer, *newNamePointer;
            //oldNamePointer = (char *)malloc((oldName.size() + 1) * sizeof(char));
            //newNamePointer = (char *)malloc((newName.size() + 1) * sizeof(char));
            //strcpy(oldNamePointer, oldName.c_str());
            //strcpy(newNamePointer, newName.c_str());
    
            //rename(oldNamePointer, newNamePointer);
            //free(oldNamePointer);
            //free(newNamePointer);
    
            ////method2
            char* oldNamePointer = new char[(oldName.size() + 1) * sizeof(char)];
            char* newNamePointer = new char[(oldName.size() + 1) * sizeof(char)];
            strcpy(oldNamePointer, oldName.c_str());
            strcpy(newNamePointer, newName.c_str());
    
            rename(oldNamePointer, newNamePointer);
            delete [] oldNamePointer;
            delete [] newNamePointer;
        }
            
        return 0;
    
    }
    View Code

    注意,不同类型之间的转换,比如char*和string、const char*和string等.

    2.c++中new和delete的使用;

    2.1)针对实体:

    type_name * point_name = new type_name;
    delete type_name;

    注意,只能使用delete来释放使用new分配的内存;使用delete的关键在于只用于new分配的内存即new的地址.

    2.2)针对动态数组:

    type_name * point_name = new type_name [num_elements];
    delete [] type_name;

    注意,数组使用的是方括号[];

    2.3)使用new和delete应遵守的规则:

    • 不要使用delete来释放不是new分配的内存;
    • 不要使用delete释放同一个内存块两次;
    • 如果使用new [] 为数组分配内存,则应使用delete [] 来释放;
    • 如果使用new为一个实体分配内存,则应使用delete(没有方括号)来释放;
    • 对空指针使用delete是安全的;

    参考

    1.here

    2.书籍:c++ Primer Plus.

  • 相关阅读:
    iOS: 学习笔记, Swift与C指针交互(译)
    kubernetes多节点部署的决心
    vim温馨提示
    简单工厂
    C++调用一个成员函数的需求this指针的情况
    hdoj 1226 超级password 【隐图BFS】
    Oracle Global Finanicals Technical Reference(一个)
    连载:面向对象的葵花宝典:思维、技能与实践(40)
    Android启动第三方应用程序
    BZOJ 1004 HNOI2008 Cards Burnside引理
  • 原文地址:https://www.cnblogs.com/happyamyhope/p/7742814.html
Copyright © 2011-2022 走看看