Win32のGetFullPathName()かCRTの_wfullpathでできる。後者は前者を呼ぶだけ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include "stdafx.h" #include <windows.h> #include <stdlib.h> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { LPCTSTR p=_T("C:\\aaa\\b/bbb\\..\\.\\zzz\\\\jjjAAA./aabbbcc/dd/d/d\\eee"); wchar_t file_path[MAX_PATH]; // これも結局GetFullPathName()を呼ぶ // \が2つ続いていても一つにしてくれる // /も\にしてくれる。 // ドットも直してくれる。 // あとは小文字にすればパスの比較はできるか _wfullpath(file_path, p, MAX_PATH); wcout << file_path << endl; GetFullPathName(p, MAX_PATH, file_path, NULL); wcout << file_path << endl; return 0; } |