별도의 문자열에서 전체 경로 문자열을 (안전하게) 만드는 방법은 무엇입니까?
C ++에는 파이썬의 기능과 동등한 것이 os.path.join
있습니까? 기본적으로 파일 경로의 두 부분 (또는 그 이상)을 결합하는 것을 찾고 있으므로 두 부분이 완벽하게 맞 물리는 것에 대해 걱정할 필요가 없습니다. Qt에 있다면 그것도 멋질 것입니다.
기본적으로 나는 몇 가지 코드를 디버깅 시간을 소비하기 때문에 그것의 적어도 일부에 있었다 root + filename
있어야했다 root/ + filename
, 나는 미래에 있음을 피하기 위해 찾고 있어요.
이에 대한 QDir 을 확인하십시오 .
QString path = QDir(dirPath).filePath(fileName);
Boost.Filesystem 라이브러리의 일부로 만 제공됩니다 . 다음은 예입니다.
#include <iostream>
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
int main ()
{
fs::path dir ("/tmp");
fs::path file ("foo.txt");
fs::path full_path = dir / file;
std::cout << full_path << std::endl;
return 0;
}
다음은 컴파일 및 실행의 예입니다 (플랫폼 별) :
$ g++ ./test.cpp -o test -lboost_filesystem -lboost_system
$ ./test
/tmp/foo.txt
유사 @ user405725 의 대답 (그러나 부스트를 사용하지 않음)에 의해 언급 @ildjarn 코멘트에서,이 기능의 일부로 볼 수 있습니다 표준 : 실험 :: 파일 시스템 . 다음 코드는 Microsoft Visual Studio 2015 Community Edition을 사용하여 컴파일됩니다.
#include <iostream>
#include <filesystem>
namespace fs = std::experimental::filesystem;
int main()
{
fs::path dir ("/tmp");
fs::path file ("foo.txt");
fs::path full_path = dir / file;
std::cout << full_path << std::endl;
return 0;
}
유닉스 / 리눅스에서 적어도, 그것은에 의해 경로의 일부를 가입하는 것이 안전 /
경로의 일부가 이미 종료하더라도 /
, 즉 root/path
동일합니다 root//path
.
이 경우 정말 필요한 것은 /
. 즉, boost::filesystem
여러 플랫폼을 지원하기 때문에 가능한 경우 좋은 선택 인 다른 답변에 동의 합니다.
Qt로이 작업을 수행하려면 QFileInfo
생성자 를 사용할 수 있습니다 .
QFileInfo fi( QDir("/tmp"), "file" );
QString path = fi.absoluteFilePath();
C ++ 11 및 Qt를 사용하면 다음을 수행 할 수 있습니다.
QString join(const QString& v) {
return v;
}
template<typename... Args>
QString join(const QString& first, Args... args) {
return QDir(first).filePath(join(args...));
}
용법:
QString path = join("/tmp", "dir", "file"); // /tmp/dir/file
Qt에서는 Qt /
API ( QFile
, QFileInfo
) 를 사용할 때 코드에서 사용하십시오 . 모든 플랫폼에서 올바른 일을 할 것입니다. 비 Qt 함수에 경로를 전달해야하거나 사용자에게 표시하기 위해 형식을 지정하려면 다음을 사용하십시오 QDir:toNativeSeparators()
.
QDir::toNativeSeparators( path );
/
기본적으로 해당하는 것으로 대체 됩니다 (예 : \
Windows). 다른 방향은를 통해 수행됩니다 QDir::fromNativeSeparators()
.
'Programing' 카테고리의 다른 글
Spring에서 세션 객체를 어떻게 얻습니까? (0) | 2020.10.05 |
---|---|
Eclipse에서 단어를 선택하는 단축키 (0) | 2020.10.05 |
rails-json 고안 요청에 대한 "경고 : CSRF 토큰 인증을 확인할 수 없습니다" (0) | 2020.10.05 |
Raspberry Pi에서 SSH 연결이 거부 됨 (0) | 2020.10.05 |
새 스레드의 WebBrowser 컨트롤 (0) | 2020.10.05 |