부스트 경로 유형을 문자열로 변환하는 방법은 무엇입니까?


127

안녕하십니까, 현재 파일 위치의 전체 경로를 가져 와서 다음 유형의 변수에 넣는 프로그램이 있습니다 : boost :: filesystem2 :: path

나는 이것을하는 방법을 찾았고 다음을 사용하여 그것을 발견했다.

string result1 = boost::filesystem::basename (myPath)

경로를 문자열로 변환하지만 파일 이름 만 변환합니다 (예 : 경로가 "C : \ name \ bobsAwesomeWordDoc.docx"인 경우 "bobsAwesomeWordDoc"만 반환)).

전체 경로를 문자열로 변환하는 방법에 대해 다음을 찾았지만 프로그램에서 구현하는 방법을 모르겠습니다. 여러 가지 방법을 시도했지만 변환 오류가 발생합니다.

const std :: string & string () :이 루틴은 경로 문법 규칙에 따라 형식이 지정된 경로가 초기화 된 문자열의 복사본을 반환합니다.

( 여기서 찾았 습니다 )

나는 시도했다 :

string result1 = string& (myPath);

그리고 다른 몇 가지 변형.

답변:


164

전화하면 myPath.string()됩니다.


1
모든 플랫폼에서 문자열이 utf8로 인코딩 된 경로를 반환한다는 보증이 있습니까?
Sergey Shambir

1
@ SergeyShambir : 불행히도 아닙니다. 명시 적으로 사용할 수 u8string()는 있지만 string()자동으로 사용되는 위치에는 도움이되지 않습니다 .
건배와 hth. -Alf

13

경로를 문자열로 변환하는 것보다 조금 더해야한다고 생각합니다. 먼저 경로의 정식 버전을 가져와야합니다. 심볼릭 링크 요소가없는 절대 경로를 문자열 로 변환 해야 합니다.

boost::filesystem::canonical(myPath).string();

추신-저는 오랫동안 Boost를 사용하여 프로그래밍했으며 문서 에서이 정보를 쉽게 찾을 수 없었습니다.


업데이트 (2017 년 10 월)

문서 : 부스트 : : 파일 시스템 :: 정식 .

그러나 C의 같은 ++ 17 있음을 유의 표준 : 파일 시스템표준 그리고 더 많은.


허용 대답은 훨씬 간단 대안이다 (그리고 그것은 작동)
alestanis


1
@BrianJack 허, 어떻게 더 이상 사용되지 않습니까? Sry, 공식 메모를 찾을 수 없습니다 ... 1.60 참조 : boost.org/doc/libs/1_60_0/libs/filesystem/doc/…
Marco Alka

@MarcoAlka 연결된 테이블 boost.org/doc/libs/1_48_0/libs/filesystem/v3/doc/… 를 참조하고 두 번째 줄을 참고하십시오. -더 이상 사용되지 않습니다.
브라이언 잭

2
@BrianJack canonize두 번째 링크마다 더 이상 사용되지 않지만 canonical(1_48 V3의 경우 첫 번째 링크 당) 보이지 않습니다. 이제 C ++ 17에서 우리는 std::filesystem물론
zdim

3

이것은 wxWidgets에서 작동했습니다. (wx 유틸리티를 사용해야하지만 테스트입니다)

void WxWidgetsBoostTestFrame::OnTestBtnClick(wxCommandEvent& event)
{
    boost::filesystem::path currentPath;
    currentPath = boost::filesystem::current_path();
    std::string curDirString;
    curDirString = boost::filesystem::canonical(currentPath).string();
    wxString mystring(curDirString.c_str(), wxConvUTF8);
    wxMessageBox(mystring); // output:  C:/Users\client\Desktop...      
}

1

전화 myPath.generic_string()하면 필요한 것을 할 수 있습니다.


0

이 작업을 수행

path.c_str();

당신은 괜찮을 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.