오늘은 맑음

C++ folder에 있는 file renaming하기 본문

Tip

C++ folder에 있는 file renaming하기

자전거 타는 구구 2019. 2. 28. 01:11
반응형

folder내부에 있는 file을 모두 읽어 renaming하기


folder 내부에 있는 file을 모두 읽어 renaming하는 방법을 알아보겠습니다.


 이 프로젝트를 작년에 이미지 처리를 위해 사용을 했었습니다.

 필요한 이미지를 크롤링해 모아놓으니 이름이 모두 제각각이었습니다.

 저는 일정한 이름, label과 index도 있어야 했기 때문에 많은 이미지들의 이름을 바꿔줄 필요가 있었습니다.

 필요하신분들은 다음 코드를 따라하시면 될 것 같습니다.

 변수 이름이 지저분하니 필요하신대로 바꿔 사용하시면 될 것 같습니다 :)


#include <iostream>

#include <io.h>

#include <string>

#include <direct.h>

#include <filesystem>


using namespace std;


int main(){

  //renaming하고 싶은 데이터가 들어있는 폴더가 있는 경로를 적으세요

  string dataSetPath = "폴더가 존재하는 경로\\";


  //renaming하고 싶은 폴더의 이름

  string folderName = "cuda\\"


  //만약 새로운 폴더로 파일들을 옮기고 싶다면 그 폴더의 이름을, 현재 폴더에 그대로 저장하려면 현재 폴더의    //이름을 입력합니다.

  string newFolderName = "cuda\\"

  

  //현재 작업 할 폴더의 경로

  string folderPath = dataSetPath + folderName;

  

  //타겟 폴더의 경로

string newFolderPath = dataSetPath + newFolderName;

        //폴더 내의 모든 파일을 읽기위해 확장자를 *.*로 지정

string path = folderPath + "*.*";


   //renaming하기 위한 이름

string fileNameTag = "cuda_";


  //원래 파일의 이름경로를 저장할 변수

string oldName;


  //새로운 파일의 이름 경로를 저장할 변수

string newName;


intptr_t handle;


  //폴더 내부의 파일 이름들을 저장할 변수

struct _finddata_t fd;


  //만약 폴더 내부가 비어있다면 "No file in directory!"를 출력

  //비어있지 않다면 fd에 모든 파일들의 이름을 저장

if ((handle = _findfirst(path.c_str(), &fd)) == -1L)

cout << "No file in directory!" << endl;


int i = 0;

  

  //파일의 이름을 하나하나 읽어 rename함수를 이용해 renaming해주는 작업입니다.

  //fd.name을 출력해보면 파일 fd에 들어있는 파일들의 이름을 확인할 수 있습니다.

  //to_string(i-2)를 한 이유는 fd의 첫 번째 값과 두 번째 값이 file의 이름이 아닌 .과 ..이 들어있기 때문입니다.

  //그 이유를 잘 몰라 저는 파일의 이름이 등장하는 2번째 값부터 renaming을 시작했습니다.

do{

if (i > 1) {

oldName = folderPath + fd.name;

newName = newFolderPath  + fileNameTag+to_string(i-2) + ".png";

rename(oldName.c_str(), newName.c_str());

}

i++;

} while (_findnext(handle, &fd) == 0);


_findclose(handle);

}


1. cuda폴더에 있는 이미지들을 renaming


2. cuda폴더에서 new_cuda폴더로 파일들을 옮기면서 renaming하기

이 작업에서는 newFolderName을 new_cuda로 지정해주었습니다.






반응형
Comments