C++로 디렉터리 만들기

Jinku Hu 2023년10월12일
  1. std::filesystem::create_directory함수를 사용하여 C++에서 디렉토리 생성
  2. std::filesystem::create_directories함수를 사용하여 C++에서 디렉토리 생성
C++로 디렉터리 만들기

이 기사에서는 C++에서 디렉토리를 만드는 방법에 대한 몇 가지 방법을 설명합니다.

std::filesystem::create_directory함수를 사용하여 C++에서 디렉토리 생성

C++ 17 버전부터 표준 라이브러리는 원래 Boost 라이브러리의 일부로 구현 된 파일 시스템 조작 인터페이스를 제공합니다. 모든 파일 시스템 기능은std::filesystem네임 스페이스 아래에 제공되며, 다음 예제에서fs로 별명을 지정합니다. create_directory기능은 현재 작업 디렉토리에 새 디렉토리를 생성하는 데 사용됩니다. 이 함수는std::filesystem::path유형의 필수 인수 하나를 취합니다.이 인수는 문자열 객체로도 전달 될 수 있으며 적절한 초기화가 자동으로 수행됩니다.

#include <filesystem>
#include <iostream>

using std::cout;
using std::endl;
using std::string;
using std::system;
namespace fs = std::filesystem;

int main() {
  string directory_name("tmp_dir");

  fs::create_directory(directory_name)
      ? cout << "created directory - " << directory_name << endl
      : cout << "create_directory() failed" << endl;

  return EXIT_SUCCESS;
}

성공적인 함수 호출은create_directory의 반환 값으로 확인할 수 있으며true로 평가되어야합니다. 생성 된 디렉토리는 동일한 디렉토리 경로를 사용하는std::filesystem::remove호출로 제거 할 수 있습니다. create_directory는 선택적으로 두 경로 인수를 사용할 수 있습니다. 두 번째는 기존 디렉토리 여야하며 새로 생성 된 디렉토리는 이전 디렉토리의 속성을 복사합니다.

#include <filesystem>
#include <iostream>

using std::cout;
using std::endl;
using std::string;
using std::system;
namespace fs = std::filesystem;

int main() {
  string directory_name("tmp_dir");

  fs::create_directory(directory_name)
      ? cout << "created directory - " << directory_name << endl
      : cout << "create_directory() failed" << endl;

  fs::remove(directory_name);

  return EXIT_SUCCESS;
}

std::filesystem::create_directories함수를 사용하여 C++에서 디렉토리 생성

또 다른 유용한 기능은std::filesystem::create_directories로, 단일 경로 인수로 지정된 여러 중첩 디렉토리를 만들 수 있습니다. 다음 예제 코드에서는이 함수를 통해 4 단계 중첩 디렉터리를 만든 다음 첫 번째 디렉터리와 루트 디렉터리를 공유하는 다른 디렉터리를 만듭니다. 그러나 마지막 수준의 디렉토리 이름이 이미 존재하는 경우 함수는false를 반환합니다.

#include <filesystem>
#include <iostream>

using std::cout;
using std::endl;
using std::string;
using std::system;
namespace fs = std::filesystem;

int main() {
  string directory_tree = "x_tmp/level1/level2/level3";
  string directory_tree2 = "x_tmp/level1-2/level2-1";

  auto ret = fs::create_directories(directory_tree);
  if (ret) {
    cout << "created directory tree as follows: " << endl;
    std::system("tree x_tmp");
  } else {
    cout << "create_directories() failed" << endl;
  }

  auto ret2 = fs::create_directories(directory_tree2);
  if (ret2) {
    cout << "created directory tree as follows: " << endl;
    std::system("tree x_tmp");
  } else {
    cout << "create_directories() failed" << endl;
  }

  return EXIT_SUCCESS;
}

create_directory와 유사하게이 함수는 성공적인 호출을 표시하는 부울 값도 리턴합니다. 제거가 필요한 경우std::filesystem::remove_all함수를 루트 디렉토리 이름으로 호출 할 수 있으며 전체 트리를 삭제합니다.

#include <filesystem>
#include <iostream>

using std::cout;
using std::endl;
using std::string;
using std::system;
namespace fs = std::filesystem;

int main() {
  string directory_tree = "x_tmp/level1/level2/level3";
  string directory_tree2 = "x_tmp/level1-2/level2-1";

  auto ret = fs::create_directories(directory_tree);
  if (ret) {
    cout << "created directory tree as follows: " << endl;
    std::system("tree x_tmp");
  } else {
    cout << "create_directories() failed" << endl;
  }

  auto ret2 = fs::create_directories(directory_tree2);
  if (ret2) {
    cout << "created directory tree as follows: " << endl;
    std::system("tree x_tmp");
  } else {
    cout << "create_directories() failed" << endl;
  }

  fs::remove_all(directory_tree.substr(0, directory_tree.find('/')));

  return EXIT_SUCCESS;
}
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ Filesystem