Index: src/libchcore/TLocalFilesystem.cpp =================================================================== diff -u -N -rcde3645c5041aedd6703b81b6fed42134c615917 -r751648800daaa5e2e42a48075aae11265cfd6564 --- src/libchcore/TLocalFilesystem.cpp (.../TLocalFilesystem.cpp) (revision cde3645c5041aedd6703b81b6fed42134c615917) +++ src/libchcore/TLocalFilesystem.cpp (.../TLocalFilesystem.cpp) (revision 751648800daaa5e2e42a48075aae11265cfd6564) @@ -190,7 +190,8 @@ THROW_CORE_EXCEPTION(eErr_InvalidArgument); WIN32_FIND_DATA wfd; - HANDLE hFind = FindFirstFile(PrependPathExtensionIfNeeded(pathFile).ToString(), &wfd); + + HANDLE hFind = FindFirstFileEx(PrependPathExtensionIfNeeded(pathFile).ToString(), FindExInfoBasic, &wfd, FindExSearchNameMatch, nullptr, FIND_FIRST_EX_LARGE_FETCH); if (hFind != INVALID_HANDLE_VALUE) { FindClose(hFind); @@ -235,10 +236,12 @@ TSmartPath TLocalFilesystem::PrependPathExtensionIfNeeded(const TSmartPath& pathInput) { - if (pathInput.GetLength() >= 248) - return PathFromString(_T("\\\\?\\")) + pathInput; - else - return pathInput; + const TSmartPath pathPrefix = PathFromString(L"\\\\?\\"); + + if (pathInput.GetLength() >= 248 && !pathInput.StartsWith(pathPrefix)) + return pathPrefix + pathInput; + + return pathInput; } TLocalFilesystem::EPathsRelation TLocalFilesystem::GetPathsRelation(const TSmartPath& pathFirst, const TSmartPath& pathSecond) Index: src/libchcore/TPath.cpp =================================================================== diff -u -N -r27c262eb9cae55720e10f4886af6b5a82cb94fe9 -r751648800daaa5e2e42a48075aae11265cfd6564 --- src/libchcore/TPath.cpp (.../TPath.cpp) (revision 27c262eb9cae55720e10f4886af6b5a82cb94fe9) +++ src/libchcore/TPath.cpp (.../TPath.cpp) (revision 751648800daaa5e2e42a48075aae11265cfd6564) @@ -891,7 +891,7 @@ return !HasDrive() && !HasServerName(); } - bool TSmartPath::StartsWith(const TSmartPath& rPath, bool bCaseSensitive) + bool TSmartPath::StartsWith(const TSmartPath& rPath, bool bCaseSensitive) const { if(bCaseSensitive) return m_strPath.StartsWith(rPath.m_strPath.c_str()); Index: src/libchcore/TPath.h =================================================================== diff -u -N -re96806b7f8ff7ca7e9f4afbea603e6351a3dc3e3 -r751648800daaa5e2e42a48075aae11265cfd6564 --- src/libchcore/TPath.h (.../TPath.h) (revision e96806b7f8ff7ca7e9f4afbea603e6351a3dc3e3) +++ src/libchcore/TPath.h (.../TPath.h) (revision 751648800daaa5e2e42a48075aae11265cfd6564) @@ -112,7 +112,7 @@ void PrependSeparatorIfDoesNotExist(); void StripSeparatorAtFront(); - bool StartsWith(const TSmartPath& rPath, bool bCaseSensitive = DefaultCaseSensitivity); + bool StartsWith(const TSmartPath& rPath, bool bCaseSensitive = DefaultCaseSensitivity) const; bool IsEmpty() const; size_t GetLength() const;