void CZipPathComponent::SetFullPath(LPCTSTR lpszFullPath) { TCHAR szDrive[_MAX_DRIVE]; TCHAR szDir[_MAX_DIR]; TCHAR szFname[_MAX_FNAME]; TCHAR szExt[_MAX_EXT]; CZipString szTempPath(lpszFullPath); const CZipString szPrefix = _T("\\\\?\\unc\\"); int i = -1, iLen = szPrefix.GetLength(); if (iLen > szTempPath.GetLength()) iLen = szTempPath.GetLength(); CZipString szPossiblePrefix = szTempPath.Left(iLen); szPossiblePrefix.MakeLower(); // must perform case insensitive comparison while (++i < iLen && szPossiblePrefix[i] == szPrefix[i]); if (i == 2 || i == 4 || i == 8) // unc path, unicode path or unc path meeting windows file name conventions { m_szPrefix = szTempPath.Left(i); szTempPath = szTempPath.Mid(i); } else m_szPrefix.Empty(); _tsplitpath(szTempPath, szDrive , szDir, szFname, szExt); m_szDrive = szDrive; m_szDirectory = szDir; m_szDirectory.TrimLeft(m_cSeparator); m_szDirectory.TrimRight(m_cSeparator); SetExtension(szExt); m_szFileTitle = szFname; }
void CZipPathComponent::SetFullPath(LPCTSTR lpszFullPath) { TCHAR szDrive[_MAX_DRIVE]; #if defined _UNICODE && _MSC_VER >= 1400 TCHAR szDir[32767]; #else TCHAR szDir[_MAX_DIR]; #endif TCHAR szFname[_MAX_FNAME]; TCHAR szExt[_MAX_EXT]; CZipString szTempPath(lpszFullPath); int i = IsPrefixed(szTempPath); if (i == ptUnc || i == ptUnicode || i == ptUncWin) // unc path, Unicode path or unc path meeting windows file name conventions { m_szPrefix = szTempPath.Left(i); szTempPath = szTempPath.Mid(i); } else m_szPrefix.Empty(); #if _MSC_VER >= 1400 _tsplitpath_s(szTempPath, szDrive , szDir, szFname, szExt); #else _tsplitpath(szTempPath, szDrive , szDir, szFname, szExt); #endif m_szDrive = szDrive; m_szDirectory = szDir; m_szDirectory.TrimLeft(m_cSeparator); m_szDirectory.TrimRight(m_cSeparator); SetExtension(szExt); m_szFileTitle = szFname; }
void CZipPathComponent::SetFullPath(LPCTSTR lpszFullPath) { CZipString szTempPath(lpszFullPath); const CZipString szPrefix = _T("\\\\?\\unc\\"); int i = -1, iLen = szPrefix.GetLength(); if (iLen > szTempPath.GetLength()) iLen = szTempPath.GetLength(); CZipString szPossiblePrefix = szTempPath.Left(iLen); szPossiblePrefix.MakeLower(); // must perform case insensitive comparison while (++i < iLen && szPossiblePrefix[i] == szPrefix[i]); if (i == 2 || i == 4 || i == 8) // unc path, Unicode path or unc path meeting windows file name conventions { m_szPrefix = szTempPath.Left(i); szTempPath = szTempPath.Mid(i); } else m_szPrefix.Empty(); m_szDrive.Empty(); m_szFileTitle.Empty(); m_szDirectory.Empty(); m_szFileExt.Empty(); int p; for (p = szTempPath.GetLength() - 1; p >= 0; p--) if (szTempPath[p] == m_cSeparator) break; if (p != -1) { m_szDirectory = szTempPath.Left(p); if (p == szTempPath.GetLength() - 1 ) return; // no filename present else p++; } else p = 0; // p points at the beginning of the filename m_szFileTitle = szTempPath.Mid(p); for (p = m_szFileTitle.GetLength() - 1; p >= 0; p--) if (m_szFileTitle[p] == _T('.')) break; if (p != -1) { m_szFileExt = m_szFileTitle.Mid(p+1); m_szFileTitle = m_szFileTitle.Left(p); } }