Vista에서 상대적으로 절대 경로를 얻는 것은 Win32/Shell PathCombine ()을 사용하여 실패하는 것 같습니다.

StackOverflow https://stackoverflow.com/questions/351479

문제

이것이 의도 된 동작이나 버그 또는 내가 사용하는 잘못된 함수인지 확실하지 않지만 문제는 PathCombine ()가 Vista 상자에서 잘못된 경로를 반환한다는 것입니다.

상대 경로는 (WMP에 의해 재생 목록으로 내보낸대로) :

..\..\..\Public\Music\Sample Music\Amanda.wma

관련된 경로는 다음과 같습니다.

C:\Users\userX\Music\Playlists\playlist.wpl

및 PathCombine ()가 반환합니다.

C:\Users\userX\Public\Music\Sample Music\Amanda.wma

그러나 파일은 실제로 여기에 있습니다 (탐색기가 판단하고 코드에서 열 수 없다는 사실) :

C:\Users\Public\Music\Sample Music\Amanda.wma

이것이 알려진 문제입니까? 내가 사용해야 할 다른 기능이 있습니까?

도움이 되었습니까?

해결책

그만큼 PathCombine에 대한 문서 두 번째 매개 변수를 지정하고 lpszdir, "디렉토리 경로가 포함 된 최대 길이의 최대 종료 문자열에 대한 포인터"입니다. 디렉토리의 완전히 자격을 갖춘 이름 대신 디렉토리 내부의 파일 이름을 완전히 전달하는 것으로 보입니다. 따라서 Playlist.wpl, 재생 목록 및 음악의 세 가지 구성 요소를 제거한 다음 나머지를 추가합니다.

당신은 사용할 수 있어야합니다 PATHREMOVEFILESPEC 디렉토리 경로에서 파일 부분을 제거합니다.

다른 팁

두 줄을 결합하면 다음을 얻을 수 있습니다.

C:\Users\userX\Music\Playlists\playlist.wpl\..\..\..\Public\Music\Sample Music\Amanda.wma

각각 "이후.."앞의 섹션을 닦아 내면 다음 순서로 U [P를 끝내십시오.

C:\Users\userX\Music\Playlists\playlist.wpl\..\..\..\Public\Music\Sample Music\Amanda.wma
C:\Users\userX\Music\Playlists\..\..\Public\Music\Sample Music\Amanda.wma
C:\Users\userX\Music\..\Public\Music\Sample Music\Amanda.wma
C:\Users\userX\Public\Music\Sample Music\Amanda.wma

그것은 ~ 때문에 "PathCombine()"경로의 어떤 부분이 파일인지 디렉토리인지 여부에 의해 방해받지 않습니다. 특별한 내비게이션 문자와 일치하는 비교적 멍청한 방법입니다 (".." 그리고 ".") 실제 내비게이션 문자없이 경로를 형성하기 위해 실제 탐색 세그먼트에 대한").

그것은 단지 "그것을 가정합니다"playlist.wpl"귀하의 경우 디렉토리 이름입니다. 꺼짐 (또는 다른 추가”.."상대 경로가 시작될 때, 파일 이름 섹션을 제거하기위한 외부 코드를 피하기위한 트릭)는 잘 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top