?? filebackup.cpp
字號:
// FileBackupE.cpp: implementation of the CFileBackup class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "FileBackup.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
BOOL CFileBackup::m_fIsInitialized = FALSE;
DWORD CFileBackup::m_dwOSVersion = ::GetVersion();
UINT CFileBackup::m_nCurrentANSICodePage = ::GetACP();
BOOL CFileBackup::CFilenameMaskListA::CFilenameMaskA::IsSubNameMatchA(LPCSTR pcsMask, LPCSTR pcsName)
{
LPCSTR pMask = pcsMask, pName = pcsName;
LPCSTR pTempMask, pTempName;
int nCharLimit = 0;
while ( 1 )
{
if ( *pMask == '*' )
nCharLimit = INT_MAX;
else if ( *pMask == '?' )
{
if ( nCharLimit != INT_MAX )
nCharLimit++;
}
else
break;
pMask++;
}
if ( *pMask == NULL )
return ::strlen(pName) <= (unsigned int)nCharLimit;
while ( nCharLimit-- >= 0 && *pName != NULL )
{
pTempMask = pMask;
pTempName = pName;
while ( 1 )
{
if ( *pTempMask == '*' || *pTempMask == '?' )
{
if ( IsSubNameMatchA(pTempMask, pTempName) )
return TRUE;
else
break;
}
else
{
if ( *pTempMask != *pTempName )
break;
else if ( *pTempMask == NULL )
return TRUE;
}
pTempMask++;
pTempName++;
}
pName++;
}
return FALSE;
}
BOOL CFileBackup::CFilenameMaskListA::CFilenameMaskA::IsSubNameMatchWithoutDotA(LPCSTR pcsMask, LPCSTR pcsName)
{
LPCSTR pMask = pcsMask, pName = pcsName;
LPCSTR pTempMask, pTempName;
int nCharLimit = 0;
while ( 1 )
{
if ( *pMask == '*' )
nCharLimit = INT_MAX;
else if ( *pMask == '?' )
{
if ( nCharLimit != INT_MAX )
nCharLimit++;
}
else
break;
pMask++;
}
if ( *pMask == NULL )
return ::strlen(pName) <= (unsigned int)nCharLimit;
pTempMask = pMask;
pTempName = pName;
while ( nCharLimit-- >= 0 && *pName != NULL )
{
while ( 1 )
{
if ( *pTempMask == '*' || *pTempMask == '?' )
{
if ( IsSubNameMatchWithoutDotA(pTempMask, pTempName) )
return TRUE;
else
break;
}
else
{
if ( *pTempMask != *pTempName )
{
if ( *pTempName == NULL && *pTempMask == '.' && *(pTempMask + 1) == NULL )
return TRUE;
else
break;
}
else if ( *pTempMask == NULL )
return TRUE;
}
pTempMask++;
pTempName++;
}
pTempMask = pMask;
pTempName = ++pName;
}
return *pName == 0 && *pTempMask == '.' && *(pTempMask + 1) == NULL;
}
BOOL CFileBackup::CFilenameMaskListW::CFilenameMaskW::IsSubNameMatchW(LPCWSTR pcwsMask, LPCWSTR pcwsName)
{
LPCWSTR pMask = pcwsMask, pName = pcwsName;
LPCWSTR pTempMask, pTempName;
int nCharLimit = 0;
while ( 1 )
{
if ( *pMask == L'*' )
nCharLimit = INT_MAX;
else if ( *pMask == L'?' )
{
if ( nCharLimit != INT_MAX )
nCharLimit++;
}
else
break;
pMask++;
}
if ( *pMask == NULL )
return ::wcslen(pName) <= (unsigned int)nCharLimit;
while ( nCharLimit-- >= 0 && *pName != NULL )
{
pTempMask = pMask;
pTempName = pName;
while ( 1 )
{
if ( *pTempMask == L'*' || *pTempMask == L'?' )
{
if ( IsSubNameMatchW(pTempMask, pTempName) )
return TRUE;
else
break;
}
else
{
if ( *pTempMask != *pTempName )
break;
else if ( *pTempMask == NULL )
return TRUE;
}
pTempMask++;
pTempName++;
}
pName++;
}
return FALSE;
}
BOOL CFileBackup::CFilenameMaskListW::CFilenameMaskW::IsSubNameMatchWithoutDotW(LPCWSTR pcwsMask, LPCWSTR pcwsName)
{
LPCWSTR pMask = pcwsMask, pName = pcwsName;
LPCWSTR pTempMask, pTempName;
int nCharLimit = 0;
while ( 1 )
{
if ( *pMask == L'*' )
nCharLimit = INT_MAX;
else if ( *pMask == L'?' )
{
if ( nCharLimit != INT_MAX )
nCharLimit++;
}
else
break;
pMask++;
}
if ( *pMask == NULL )
return ::wcslen(pName) <= (unsigned int)nCharLimit;
pTempMask = pMask;
pTempName = pName;
while ( nCharLimit-- >= 0 && *pName != NULL )
{
while ( 1 )
{
if ( *pTempMask == L'*' || *pTempMask == L'?' )
{
if ( IsSubNameMatchWithoutDotW(pTempMask, pTempName) )
return TRUE;
else
break;
}
else
{
if ( *pTempMask != *pTempName )
{
if ( *pTempName == NULL && *pTempMask == L'.' && *(pTempMask + 1) == NULL )
return TRUE;
else
break;
}
else if ( *pTempMask == NULL )
return TRUE;
}
pTempMask++;
pTempName++;
}
pTempMask = pMask;
pTempName = ++pName;
}
return *pName == 0 && *pTempMask == L'.' && *(pTempMask + 1) == NULL;
}
UINT CFileBackup::CWorkerThread::DummyThreadProc(CWorkerThread* pThis)
{
UINT nRet = pThis->m_pfnCustomThreadProc(pThis->m_pCustomThreadProcParam);
if ( nRet == ERROR_SUCCESS )
return pThis->ExitInstance();
else
{
pThis->ExitInstance();
return nRet;
}
}
BOOL CFileBackup::CFileFilterA::CParsedPathItemA::AddIncludePath(LPCSTR pcsPath, LPCSTR pcsFilenameMask, BOOL fIsIncludeFilenameMask, DWORD* pdwFileAttributesMask, BOOL fIsIncludeFileAttributesMask)
{
if ( (m_dwFlags & CParsedPathItemA::ITEM_TYPE_MASK) != CParsedPathItemA::INTERMEDIA_ITEM )
return FALSE;
switch ( m_dwFlags & CParsedPathItemA::ITEM_MASK )
{
case CParsedPathItemA::ROOT_ITEM:
{
CParsedPathItemA *pPrevChild, *pChild;
int nDrive;
BOOL fIsLastName;
DWORD dwFlags = 0;
if ( pcsPath[1] != ':' || pcsPath[2] != NULL && pcsPath[2] != '\\' )
return FALSE;
else if ( *pcsPath >= 'A' && *pcsPath <= 'Z' )
nDrive = *pcsPath - 'A';
else if ( *pcsPath >= 'a' && *pcsPath <= 'z' )
nDrive = *pcsPath - 'a';
else
return FALSE;
if ( (fIsLastName = pcsPath[2] == NULL || pcsPath[2] == '\\' && pcsPath[3] == NULL) )
{
dwFlags = CParsedPathItemA::DRIVE_ITEM | CParsedPathItemA::INCLUDE_ITEM;
if ( pcsFilenameMask )
dwFlags |= fIsIncludeFilenameMask ? CParsedPathItemA::INCLUDE_FILENAME_MASK : CParsedPathItemA::EXCLUDE_FILENAME_MASK;
if ( pdwFileAttributesMask )
dwFlags |= fIsIncludeFileAttributesMask ? CParsedPathItemA::INCLUDE_FILE_ATTRIBUTES_MASK : CParsedPathItemA::EXCLUDE_FILE_ATTRIBUTES_MASK;
}
else
dwFlags = CParsedPathItemA::DRIVE_ITEM | CParsedPathItemA::INTERMEDIA_ITEM;
pPrevChild = NULL;
pChild = m_pFirstChild;
while ( pChild && (int)pChild->m_psName < nDrive )
{
pPrevChild = pChild;
pChild = pChild->m_pNextSibling;
}
if ( pChild && nDrive == (int)pChild->m_psName )
{
if ( fIsLastName )
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -