2018. 10. 2. 20:01ㆍIT-개발/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
'IT-개발 > winapi 및 MFC' 카테고리의 다른 글
CEdit - 한글기본으로 입력되게 처리 (0) | 2018.11.30 |
---|---|
process 실행 및 종료까지 대기 sample (0) | 2018.10.29 |
Web에서 Agent 실행하기(1) - Custom URI (0) | 2018.09.11 |
MAX_PATH - 파일명 및 전체경로 길이 제한 (0) | 2018.06.01 |
[winapi] 자주쓰게되는 api들 모음 (0) | 2018.02.23 |