pathstr.cpp
资源名称:shell.rar [点击查看]
上传用户:xhy777
上传日期:2007-02-14
资源大小:24088k
文件大小:6k
源码类别:
系统编程
开发平台:
Visual C++
- //+-------------------------------------------------------------------------
- //
- // Microsoft Windows
- //
- // Copyright (C) Microsoft Corporation, 1997 - 1999
- //
- // File: pathstr.cpp
- //
- //--------------------------------------------------------------------------
- #include "pch.h"
- #pragma hdrstop
- #include "pathstr.h"
- CPath::CPath(
- LPCTSTR pszRoot,
- LPCTSTR pszDir,
- LPCTSTR pszFile,
- LPCTSTR pszExt
- )
- {
- if (pszDir)
- SetPath(pszDir);
- if (pszRoot)
- SetRoot(pszRoot);
- if (pszFile)
- SetFileSpec(pszFile);
- if (pszExt)
- SetExtension(pszExt);
- }
- CPath::CPath(
- const CPath& rhs
- ) : CString(rhs)
- {
- }
- CPath&
- CPath::operator = (
- const CPath& rhs
- )
- {
- if (this != &rhs)
- {
- CString::operator = (rhs);
- }
- return *this;
- }
- CPath&
- CPath::operator = (
- LPCTSTR rhs
- )
- {
- CString::operator = (rhs);
- return *this;
- }
- void
- CPath::AddBackslash(
- void
- )
- {
- ::PathAddBackslash(GetBuffer(MAX(MAX_PATH, Length() + 2)));
- ReleaseBuffer();
- }
- void
- CPath::RemoveBackslash(
- void
- )
- {
- ::PathRemoveBackslash(GetBuffer());
- ReleaseBuffer();
- }
- bool
- CPath::GetRoot(
- CPath *pOut
- ) const
- {
- CPath temp(*this);
- temp.StripToRoot();
- *pOut = temp;
- return 0 < pOut->Length();
- }
- bool
- CPath::GetPath(
- CPath *pOut
- ) const
- {
- CPath temp(*this);
- temp.RemoveFileSpec();
- *pOut = temp;
- return 0 < pOut->Length();
- }
- bool
- CPath::GetDirectory(
- CPath *pOut
- ) const
- {
- if (GetPath(pOut))
- pOut->RemoveRoot();
- return 0 < pOut->Length();
- }
- bool
- CPath::GetExtension(
- CPath *pOut
- ) const
- {
- *pOut = ::PathFindExtension(*this);
- return 0 < pOut->Length();
- }
- bool
- CPath::GetFileSpec(
- CPath *pOut
- ) const
- {
- *pOut = ::PathFindFileName(*this);
- return 0 < pOut->Length();
- }
- bool
- CPath::Append(
- LPCTSTR psz
- )
- {
- bool bResult = boolify(::PathAppend(GetBuffer(MAX(MAX_PATH, Length() + lstrlen(psz) + 3)), psz));
- ReleaseBuffer();
- return bResult;
- }
- bool
- CPath::BuildRoot(
- int iDrive
- )
- {
- Empty();
- bool bResult = NULL != ::PathBuildRoot(GetBuffer(5), iDrive);
- ReleaseBuffer();
- return bResult;
- }
- bool
- CPath::Canonicalize(
- void
- )
- {
- CString strTemp(*this);
- bool bResult = boolify(::PathCanonicalize(GetBuffer(MAX(MAX_PATH, Size())), strTemp));
- ReleaseBuffer();
- return bResult;
- }
- bool
- CPath::Compact(
- HDC hdc,
- int cxPixels
- )
- {
- bool bResult = boolify(::PathCompactPath(hdc, GetBuffer(), cxPixels));
- ReleaseBuffer();
- return bResult;
- }
- bool
- CPath::CommonPrefix(
- LPCTSTR pszPath1,
- LPCTSTR pszPath2
- )
- {
- Empty();
- ::PathCommonPrefix(pszPath1,
- pszPath2,
- GetBuffer(MAX(MAX_PATH, (MAX(lstrlen(pszPath1), lstrlen(pszPath2)) + 1))));
- ReleaseBuffer();
- return 0 < Length();
- }
- void
- CPath::QuoteSpaces(
- void
- )
- {
- ::PathQuoteSpaces(GetBuffer(MAX(MAX_PATH, Length() + 3)));
- ReleaseBuffer();
- }
- void
- CPath::UnquoteSpaces(
- void
- )
- {
- ::PathUnquoteSpaces(GetBuffer());
- ReleaseBuffer();
- }
- void
- CPath::RemoveBlanks(
- void
- )
- {
- ::PathRemoveBlanks(GetBuffer());
- ReleaseBuffer();
- }
- void
- CPath::RemoveExtension(
- void
- )
- {
- PathRemoveExtension(GetBuffer());
- ReleaseBuffer();
- }
- void
- CPath::RemoveFileSpec(
- void
- )
- {
- ::PathRemoveFileSpec(GetBuffer());
- ReleaseBuffer();
- }
- void
- CPath::RemoveRoot(
- void
- )
- {
- LPTSTR psz = ::PathSkipRoot(*this);
- if (psz)
- {
- CPath temp(psz);
- *this = temp;
- }
- }
- void
- CPath::RemovePath(
- void
- )
- {
- CPath temp;
- GetFileSpec(&temp);
- *this = temp;
- }
- void
- CPath::StripToRoot(
- void
- )
- {
- ::PathStripToRoot(GetBuffer());
- ReleaseBuffer();
- }
- void
- CPath::SetRoot(
- LPCTSTR pszRoot
- )
- {
- CPath strTemp(*this);
- strTemp.RemoveRoot();
- *this = pszRoot;
- Append(strTemp);
- }
- void
- CPath::SetPath(
- LPCTSTR pszPath
- )
- {
- CPath strTemp(*this);
- *this = pszPath;
- strTemp.RemovePath();
- Append(strTemp);
- }
- void
- CPath::SetDirectory(
- LPCTSTR pszDir
- )
- {
- CPath path;
- GetPath(&path);
- path.StripToRoot();
- path.AddBackslash();
- path.Append(pszDir);
- SetPath(path);
- }
- void
- CPath::SetFileSpec(
- LPCTSTR pszFileSpec
- )
- {
- RemoveFileSpec();
- Append(pszFileSpec);
- }
- void
- CPath::SetExtension(
- LPCTSTR pszExt
- )
- {
- ::PathRenameExtension(GetBuffer(MAX(MAX_PATH, Length() + lstrlen(pszExt) + 2)), pszExt);
- ReleaseBuffer();
- }
- CPathIter::CPathIter(
- const CPath& path
- ) : m_path(path),
- m_pszCurrent((LPTSTR)m_path.Cstr())
- {
- //
- // Skip over leading whitespace and backslashes.
- //
- while(*m_pszCurrent &&
- (TEXT('\') == *m_pszCurrent ||
- TEXT(' ') == *m_pszCurrent ||
- TEXT('t') == *m_pszCurrent ||
- TEXT('n') == *m_pszCurrent))
- {
- m_pszCurrent++;
- }
- }
- bool
- CPathIter::Next(
- CPath *pOut
- )
- {
- DBGASSERT((NULL != pOut));
- LPCTSTR pszStart = m_pszCurrent;
- if (NULL == pszStart || TEXT(' ') == *pszStart)
- return false;
- TCHAR chTemp = TEXT(' ');
- m_pszCurrent = ::PathFindNextComponent(pszStart);
- if (NULL != m_pszCurrent && *m_pszCurrent)
- SWAP(*(m_pszCurrent - 1), chTemp);
- *pOut = pszStart;
- if (TEXT(' ') != chTemp)
- SWAP(*(m_pszCurrent - 1), chTemp);
- return true;
- }
- void
- CPathIter::Reset(
- void
- )
- {
- m_pszCurrent = (LPTSTR)m_path.Cstr();
- }
English
