shlwapi - pathcreatefromurl (URL to FilePath)

2018. 10. 2. 20:01IT-개발/winapi 및 MFC

반응형


url 로 현재 PC에 있는 파일의 경로 정보를 나타낼 수 있다.


ex) file:///c:/sample/%23-00.html



그런데 이걸 윈도우에서 사용하는 MS DOS 시절 표시법 "C:\sample\....html" 로 바꾸려니 앞에 file:// 


만 없앤다고 되는 일이 아니란걸 알게된다.



관련 자료를 찾다가 보니 위키백과에 관련 내용이 너무 좋아 Link 건다.


https://en.wikipedia.org/wiki/File_URI_scheme



한마디로 변환이 필요한거다.



C#  에서는 


System namespace 에 있는 URI Class 의 Properties 중에 localpath 라는거 하나만 쓰면 된다는거 알게되니


너무 부럽니다. 역시, 이래서 C# 쓰나 싶다.



동일한 기능을 하는 MFC나 C++ library 뒤지다가..  Shell 관련 api들을 제공하는 shlwapi 쪽에서 가능성 있는 녀석을


찾게 된다. 바로


(URL to FilePath)

shlwapi - PathCreateFromUrl


(FilePath to URL)

shlwapi - UrlCreateFromPath



이외에도 다양한 Shell 관련 API들이 있다.


https://docs.microsoft.com/ko-kr/windows/desktop/api/_shell/


https://docs.microsoft.com/ko-kr/windows/desktop/api/shlwapi/



참고들 하자~... 


근데 막상 쓸려고 하니 자꾸 S_OK 가 않나온다... 이상해서 이렇게 써봤다.



TCHAR chUrltoPath[INTERNET_MAX_URL_LENGTH] = {0,};

DWORD dwSize = INTERNET_MAX_URL_LENGTH;

HRESULT hr = PathCreateFromUrl(strFilePath.data(), chUrltoPath, &dwSize, NULL);

 

_com_error err(hr);

log.Write(_T("PathCreateFromUrl - HResult (ERROR : 0x%08x) - %s"), hr, err.ErrorMessage());


error 가 났던 원인은 dwSize 값을 0으로 해서 자꾸 error 가 났었나보다~


여하튼 PathCreateFromUrl 좋네요


_com_error err(hr);


덕분에 Link 하나 더 건다.



HResult 값 의미를 알려주는 Link : https://msdn.microsoft.com/en-us/library/cc704587.aspx