안녕하십니까, 현재 파일 위치의 전체 경로를 가져 와서 다음 유형의 변수에 넣는 프로그램이 있습니다 : boost :: filesystem2 :: path
나는 이것을하는 방법을 찾았고 다음을 사용하여 그것을 발견했다.
string result1 = boost::filesystem::basename (myPath)
경로를 문자열로 변환하지만 파일 이름 만 변환합니다 (예 : 경로가 “C : \ name \ bobsAwesomeWordDoc.docx”인 경우 “bobsAwesomeWordDoc”만 반환)).
전체 경로를 문자열로 변환하는 방법에 대해 다음을 찾았지만 프로그램에서 구현하는 방법을 모르겠습니다. 여러 가지 방법을 시도했지만 변환 오류가 발생합니다.
const std :: string & string () :이 루틴은 경로 문법 규칙에 따라 형식이 지정된 경로가 초기화 된 문자열의 복사본을 반환합니다.
나는 시도했다 :
string result1 = string& (myPath);
그리고 다른 몇 가지 변형.
답변
전화하면 myPath.string()
됩니다.
답변
경로를 문자열로 변환하는 것보다 조금 더해야한다고 생각합니다. 먼저 경로의 정식 버전을 가져와야합니다. 심볼릭 링크 요소가없는 절대 경로를 문자열 로 변환 해야 합니다.
boost::filesystem::canonical(myPath).string();
추신-저는 오랫동안 Boost를 사용하여 프로그래밍했으며 문서 에서이 정보를 쉽게 찾을 수 없었습니다.
업데이트 (2017 년 10 월)
문서 : 부스트 : : 파일 시스템 :: 정식 .
그러나 C의 같은 ++ 17 있음을 유의 표준 : 파일 시스템 과 표준 그리고 더 많은.
답변
이것은 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...
}
답변
전화 myPath.generic_string()
하면 필요한 것을 할 수 있습니다.
답변
이 작업을 수행
path.c_str();
당신은 괜찮을 것입니다.