C++에서 현재 디렉토리 가져 오기

Jinku Hu 2023년10월12일
  1. getcwd 함수를 사용하여 현재 디렉토리 가져 오기
  2. std::filesystem::current_path 함수를 사용하여 현재 디렉토리 가져 오기
  3. get_current_dir_name 함수를 사용하여 현재 디렉토리 가져 오기
C++에서 현재 디렉토리 가져 오기

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

getcwd 함수를 사용하여 현재 디렉토리 가져 오기

getcwd는 많은 유닉스 기반 시스템에서 사용할 수있는 POSIX 호환 함수이며 현재 작업 디렉토리를 검색 할 수 있습니다. 이 함수는 두 개의 매개 변수, 즉 디렉토리 경로 이름이 저장되는 첫 번째 char*버퍼와 버퍼의 크기를 사용합니다. 임의의 예로서char 고정 길이 배열을 선언하고 256 요소 버퍼를 할당합니다. 호출이 성공하면char 버퍼에 접근하여 현재 디렉토리의 저장된 이름을 인쇄 할 수 있습니다.

#include <unistd.h>

#include <filesystem>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::filesystem::current_path;

int main() {
  char tmp[256];
  getcwd(tmp, 256);
  cout << "Current working directory: " << tmp << endl;

  return EXIT_SUCCESS;
}

출력:

Current working directory: /tmp/projects

std::filesystem::current_path 함수를 사용하여 현재 디렉토리 가져 오기

std::filesystem::current_path 메소드는 C++ 파일 시스템 라이브러리의 일부이며 최신 코딩 지침에 따라 현재 디렉토리를 검색하는 데 권장되는 방법입니다. C++ 17 버전 이후에filesystem 라이브러리가 추가되었으며 다음 코드를 사용하려면 해당 버전의 컴파일러가 필요합니다.

인수없이std::filesystem::current_path는 현재 작업 디렉토리를 반환하며 콘솔에 직접 출력 할 수 있습니다. 디렉토리 경로가 함수에 전달되면 현재 디렉토리를 주어진 경로로 변경합니다.

#include <unistd.h>

#include <filesystem>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::filesystem::current_path;

int main() {
  cout << "Current working directory: " << current_path() << endl;

  return EXIT_SUCCESS;
}

출력:

Current working directory: /tmp/projects

get_current_dir_name 함수를 사용하여 현재 디렉토리 가져 오기

get_current_dir_name은 호출 성공 후 현재 작업 디렉토리의 경로가 저장된char*를 반환한다는 점을 제외하면 이전 메소드와 유사한 C 라이브러리 함수입니다. get_current_dir_name은 경로 이름을 저장할 충분한 동적 메모리를 자동으로 할당하지만 호출자는 프로그램이 종료되기 전에 메모리를 해제해야합니다.

#include <unistd.h>

#include <filesystem>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::filesystem::current_path;

int main() {
  char *cwd = get_current_dir_name();
  cout << "Current working directory: " << cwd << endl;
  free(cwd);

  return EXIT_SUCCESS;
}

출력:

Current working directory: /tmp/projects

C++ 파일 시스템 라이브러리의 또 다른 유용한 기능은std::filesystem::directory_iterator 객체로, 지정된 디렉토리 경로의 요소를 반복하는 데 사용할 수 있습니다. 요소는 파일, 심볼릭 링크, 디렉토리 또는 소켓 일 수 있으며 반복 순서는 지정되지 않습니다. 다음 예에서는 현재 작업 디렉토리에있는 각 요소의 경로 이름을 출력합니다.

#include <unistd.h>

#include <filesystem>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::filesystem::current_path;
using std::filesystem::directory_iterator;

int main() {
  for (auto& p : directory_iterator("./")) cout << p.path() << '\n';

  return EXIT_SUCCESS;
}

출력:

"./main.cpp"
"./a.out"
작가: 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