티스토리 뷰

C++

[C++] 폴더 생성 like mkdir in python

developer0hye 2021. 6. 7. 22:25

https://en.cppreference.com/w/cpp/filesystem

 

Filesystem library - cppreference.com

The Filesystem library provides facilities for performing operations on file systems and their components, such as paths, regular files, and directories. The filesystem library was originally developed as boost.filesystem, was published as the technical sp

en.cppreference.com

 

filesystem 을 이용하면 된다.

#include <filesystem>
namespace fs = std::filesystem;

 

문제는 gcc version이 8보다 낮으면 위처럼 했을때 에러가 난다. 그런 경우 아래 처럼 작성하자.

 

#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;

 

둘중에 되는 걸로 코드 짜두고 나중에 다른 gcc version상에서 구현해야하는 경우 include 쪽과 namespace 정의 부분만 바꾸면 된다.

 

filesystem 을 이용해 폴더 생성 함수(mkdir)를 짜보면 아래와 같이 짤 수 있다.

 

void mkdir( const string &path ) {
    fs::path p( path );

    if ( fs::is_directory( p ) )
        return;

    fs::create_directories( p );
}

위 함수내에 if문은 굳이 없어도 되긴할것이다. 폴더가 이미 있는 경우 스킵하도록 짠건데 아마 create_directories 함수 내부에서 이러한 처리가 되어있을것이다.

 

Usage는 아래와 같다.

mkdir("./newFolder1"); // "./newFolder1"를 생성한다.
mkdir("./newFolder2/subFolder"); // "./newFolder2"를 생성하고 "./newFolder2/subFolder"를 생성한다.

 

c++ 버전업이되며 개발자들의 편의성을 증진시키기위한 다양한 라이브러리들이 많이 개발된 거 같다. 잘찾아보고 쓴다면 개발 속도를 엄청 높일 수 있을듯하다.

 

덧 붙여서...

 

CMake를 이용해 프로젝트를 빌드하는 상황인데 filesystem 헤더를 추가했을때 build가 안되는 문제가 있었다.

 

이런 경우에 CMakeLists 파일 내에서 target_link_libraries 부분을 찾아 아래처럼 stdc++fs 를 추가해주면 된다.

 

target_link_libraries(${PROJECT_NAME}
        ...
        stdc++fs
        ...
    )

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함