?? filebackupe.cpp
字號(hào):
// FileBackup.cpp: implementation of the CFileBackupE class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "FileBackupE.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
CFileBackupE::CGlobalInit CFileBackupE::m_objInitObject;
CFileBackupE::CLargeBufferBlockBank::CLargeBufferPool CFileBackupE::CLargeBufferBlockBank::m_objLargeBufferPool;
CFileBackupE::CMessageQueue::CMessageBufferPool CFileBackupE::CMessageQueue::m_objMessageBufferPool;
//IMPLEMENT_DYNAMIC(CFileBackupE::CVxDException, CException)
#ifdef _AFXDLL
CRuntimeClass* PASCAL CFileBackupE::CVxDException::_GetBaseClass() { return RUNTIME_CLASS(CException); }
AFX_COMDAT const AFX_DATADEF CRuntimeClass CFileBackupE::CVxDException::classCFileBackup_CVxDException = {
"CFileBackup_CVxDException",
sizeof(class CFileBackupE::CVxDException),
0xFFFF,
NULL,
&(CFileBackupE::CVxDException::_GetBaseClass),
NULL
};
CRuntimeClass* CFileBackupE::CVxDException::GetRuntimeClass() const { return ((CRuntimeClass*)(&CFileBackupE::CVxDException::classCFileBackup_CVxDException)); }
#else
AFX_COMDAT const AFX_DATADEF CRuntimeClass CFileBackupE::CVxDException::classCFileBackup_CVxDException = {
"CFileBackup_CVxDException",
sizeof(class CFileBackupE::CVxDException),
0xFFFF,
NULL,
&(CFileBackupE::CVxDException::_GetBaseClass),
NULL
};
CRuntimeClass* CFileBackupE::CVxDException::GetRuntimeClass() const { return ((CRuntimeClass*)(&CFileBackupE::CVxDException::classCFileBackup_CVxDException)); }
#endif
//IMPLEMENT_DYNAMIC(CFileBackupE::CDatabaseAccessThread, CWinThread)
#ifdef _AFXDLL
CRuntimeClass* PASCAL CFileBackupE::CDatabaseAccessThread::_GetBaseClass() { return RUNTIME_CLASS(CWinThread); }
AFX_COMDAT const AFX_DATADEF CRuntimeClass CFileBackupE::CDatabaseAccessThread::classCFileBackup_CDatabaseAccessThread = {
"CFileBackup_CDatabaseAccessThread",
sizeof(class CFileBackupE::CDatabaseAccessThread),
0xFFFF,
NULL,
&(CFileBackupE::CDatabaseAccessThread::_GetBaseClass),
NULL
};
CRuntimeClass* CFileBackupE::CDatabaseAccessThread::GetRuntimeClass() const { return ((CRuntimeClass*)(&CFileBackupE::CDatabaseAccessThread::classCFileBackup_CDatabaseAccessThread)); }
#else
AFX_COMDAT const AFX_DATADEF CRuntimeClass CFileBackupE::CDatabaseAccessThread::classCFileBackup_CDatabaseAccessThread = {
"CFileBackup_CDatabaseAccessThread",
sizeof(class CFileBackupE::DatabaseAccessThread),
0xFFFF,
NULL,
&(CFileBackupE::CDatabaseAccessThread::_GetBaseClass),
NULL
};
CRuntimeClass* CFileBackupE::CDatabaseAccessThread::GetRuntimeClass() const { return ((CRuntimeClass*)(&CFileBackupE::CDatabaseAccessThread::classCFileBackup_CDatabaseAccessThread)); }
#endif
BEGIN_MESSAGE_MAP(CFileBackupE::CDatabaseAccessThread, CWinThread)
END_MESSAGE_MAP()
BOOL CFileBackupE::CFilenameMaskList::CFilenameMask::IsSubNameMatch(LPCTSTR pcstrMask, LPCTSTR pcstrName)
{
LPCTSTR pMask = pcstrMask, pName = pcstrName;
LPCTSTR pTempMask, pTempName;
int nCharLimit = 0;
while ( 1 )
{
if ( *pMask == _T('*') )
nCharLimit = INT_MAX;
else if ( *pMask == _T('?') )
{
if ( nCharLimit != INT_MAX )
nCharLimit++;
}
else
break;
pMask++;
}
if ( *pMask == NULL )
return _tcslen(pName) <= (unsigned int)nCharLimit;
while ( nCharLimit-- >= 0 && *pName != NULL )
{
pTempMask = pMask;
pTempName = pName;
while ( 1 )
{
if ( *pTempMask == _T('*') || *pTempMask == _T('?') )
{
if ( IsSubNameMatch(pTempMask, pTempName) )
return TRUE;
else
break;
}
else
{
if ( *pTempMask != *pTempName )
break;
else if ( *pTempMask == NULL )
return TRUE;
}
pTempMask++;
pTempName++;
}
pName++;
}
return FALSE;
}
BOOL CFileBackupE::CFilenameMaskList::CFilenameMask::IsSubNameMatchWithoutDot(LPCTSTR pcstrMask, LPCTSTR pcstrName)
{
LPCTSTR pMask = pcstrMask, pName = pcstrName;
LPCTSTR pTempMask, pTempName;
int nCharLimit = 0;
while ( 1 )
{
if ( *pMask == _T('*') )
nCharLimit = INT_MAX;
else if ( *pMask == _T('?') )
{
if ( nCharLimit != INT_MAX )
nCharLimit++;
}
else
break;
pMask++;
}
if ( *pMask == NULL )
return _tcslen(pName) <= (unsigned int)nCharLimit;
pTempMask = pMask;
pTempName = pName;
while ( nCharLimit-- >= 0 && *pName != NULL )
{
while ( 1 )
{
if ( *pTempMask == _T('*') || *pTempMask == _T('?') )
{
if ( IsSubNameMatchWithoutDot(pTempMask, pTempName) )
return TRUE;
else
break;
}
else
{
if ( *pTempMask != *pTempName )
{
if ( *pTempName == NULL && *pTempMask == _T('.') && *(pTempMask + 1) == NULL )
return TRUE;
else
break;
}
else if ( *pTempMask == NULL )
return TRUE;
}
pTempMask++;
pTempName++;
}
pTempMask = pMask;
pTempName = ++pName;
}
return *pName == 0 && *pTempMask == _T('.') && *(pTempMask + 1) == NULL;
}
BOOL CFileBackupE::CFileFilter::CParsedPathItem::AddIncludePath(LPCTSTR pctsPath, LPCTSTR pctsFilenameMask, BOOL fIsIncludeFilenameMask, DWORD* pdwFileAttributesMask, BOOL fIsIncludeFileAttributesMask)
{
if ( (m_dwFlags & CParsedPathItem::ITEM_TYPE_MASK) != CParsedPathItem::INTERMEDIA_ITEM )
return FALSE;
switch ( m_dwFlags & CParsedPathItem::ITEM_MASK )
{
case CParsedPathItem::ROOT_ITEM:
{
CParsedPathItem *pPrevChild, *pChild;
int nDrive;
BOOL fIsLastName;
DWORD dwFlags = 0;
if ( pctsPath[1] != _T(':') || pctsPath[2] != NULL && pctsPath[2] != _T('\\') )
return FALSE;
else if ( *pctsPath >= _T('A') && *pctsPath <= _T('Z') )
nDrive = *pctsPath - _T('A');
else if ( *pctsPath >= _T('a') && *pctsPath <= _T('z') )
nDrive = *pctsPath - _T('a');
else
return FALSE;
if ( (fIsLastName = pctsPath[2] == NULL || pctsPath[2] == _T('\\') && pctsPath[3] == NULL) )
{
dwFlags = CParsedPathItem::DRIVE_ITEM | CParsedPathItem::INCLUDE_ITEM;
if ( pctsFilenameMask )
dwFlags |= fIsIncludeFilenameMask ? CParsedPathItem::INCLUDE_FILENAME_MASK : CParsedPathItem::EXCLUDE_FILENAME_MASK;
if ( pdwFileAttributesMask )
dwFlags |= fIsIncludeFileAttributesMask ? CParsedPathItem::INCLUDE_FILE_ATTRIBUTES_MASK : CParsedPathItem::EXCLUDE_FILE_ATTRIBUTES_MASK;
}
else
dwFlags = CParsedPathItem::DRIVE_ITEM | CParsedPathItem::INTERMEDIA_ITEM;
pPrevChild = NULL;
pChild = m_pFirstChild;
while ( pChild && (int)pChild->m_ptsName < nDrive )
{
pPrevChild = pChild;
pChild = pChild->m_pNextSibling;
}
if ( pChild && nDrive == (int)pChild->m_ptsName )
{
if ( fIsLastName )
return pChild->SetItemData(pctsPath, pctsFilenameMask, pdwFileAttributesMask ? *pdwFileAttributesMask : 0, dwFlags);
else
return pChild->AddIncludePath(pctsPath + 3, pctsFilenameMask, fIsIncludeFilenameMask, pdwFileAttributesMask, fIsIncludeFileAttributesMask);
}
else
{
pChild = new CParsedPathItem(this, pctsPath, pctsFilenameMask, pdwFileAttributesMask ? *pdwFileAttributesMask : 0, dwFlags);
if ( pPrevChild == NULL )
{
pChild->m_pNextSibling = m_pFirstChild;
m_pFirstChild = pChild;
}
else
{
pChild->m_pNextSibling = pPrevChild->m_pNextSibling;
pPrevChild->m_pNextSibling = pChild;
}
if ( fIsLastName )
return TRUE;
else
return pChild->AddIncludePath(pctsPath + 3, pctsFilenameMask, fIsIncludeFilenameMask, pdwFileAttributesMask, fIsIncludeFileAttributesMask);
}
}
case CParsedPathItem::DRIVE_ITEM:
case CParsedPathItem::DIRECTORY_OR_FILE_ITEM:
{
CParsedPathItem *pPrevChild = NULL, *pChild = m_pFirstChild;
TCHAR tsPathName[MAX_PATH];
int nLen;
BOOL fIsLastName;
DWORD dwFlags = 0;
int nCompare;
for ( nLen = 0; pctsPath[nLen] && pctsPath[nLen] != _T('\\'); nLen++ )
tsPathName[nLen] = LOWER(pctsPath[nLen]);
tsPathName[nLen] = NULL;
if ( (fIsLastName = pctsPath[nLen] == NULL || pctsPath[nLen] == _T('\\') && pctsPath[nLen + 1] == NULL) )
{
dwFlags = CParsedPathItem::DIRECTORY_OR_FILE_ITEM | CParsedPathItem::INCLUDE_ITEM;
if ( pctsFilenameMask )
dwFlags |= fIsIncludeFilenameMask ? CParsedPathItem::INCLUDE_FILENAME_MASK : CParsedPathItem::EXCLUDE_FILENAME_MASK;
if ( pdwFileAttributesMask )
dwFlags |= fIsIncludeFileAttributesMask ? CParsedPathItem::INCLUDE_FILE_ATTRIBUTES_MASK : CParsedPathItem::EXCLUDE_FILE_ATTRIBUTES_MASK;
}
else
dwFlags = CParsedPathItem::DIRECTORY_OR_FILE_ITEM | CParsedPathItem::INTERMEDIA_ITEM;
nCompare = -1;
while ( pChild && (nLen != *(pChild->m_ptsName - 1) || (nCompare = _tcsncmp(pChild->m_ptsName, tsPathName, nLen)) < 0) )
{
pPrevChild = pChild;
pChild = pChild->m_pNextSibling;
}
if ( pChild && nCompare == 0 )
{
if ( fIsLastName )
return pChild->SetItemData(tsPathName, pctsFilenameMask, pdwFileAttributesMask ? *pdwFileAttributesMask : 0, dwFlags);
else
return pChild->AddIncludePath(pctsPath + nLen + 1, pctsFilenameMask, fIsIncludeFilenameMask, pdwFileAttributesMask, fIsIncludeFileAttributesMask);
}
else
{
pChild = new CParsedPathItem(this, tsPathName, pctsFilenameMask, pdwFileAttributesMask ? *pdwFileAttributesMask : 0, dwFlags);
if ( pPrevChild == NULL )
{
pChild->m_pNextSibling = m_pFirstChild;
m_pFirstChild = pChild;
}
else
{
pChild->m_pNextSibling = pPrevChild->m_pNextSibling;
pPrevChild->m_pNextSibling = pChild;
}
if ( fIsLastName )
return TRUE;
else
return pChild->AddIncludePath(pctsPath + nLen + 1, pctsFilenameMask, fIsIncludeFilenameMask, pdwFileAttributesMask, fIsIncludeFileAttributesMask);
}
}
}
return FALSE;
}
BOOL CFileBackupE::CFileFilter::CParsedPathItem::AddExcludePath(LPCTSTR pctsPath, BOOL fUnderIncludePath)
{
switch ( m_dwFlags & CParsedPathItem::ITEM_TYPE_MASK )
{
case CParsedPathItem::EXCLUDE_ITEM:
return FALSE;
case CParsedPathItem::INCLUDE_ITEM:
fUnderIncludePath = TRUE;
}
switch ( m_dwFlags & CParsedPathItem::ITEM_MASK )
{
case CParsedPathItem::ROOT_ITEM:
{
CParsedPathItem *pPrevChild, *pChild;
int nDrive;
BOOL fIsLastName;
if ( pctsPath[1] != _T(':') )
return FALSE;
else if ( *pctsPath >= _T('A') && *pctsPath <= _T('Z') )
nDrive = *pctsPath - _T('A');
else if ( *pctsPath >= _T('a') && *pctsPath <= _T('z') )
nDrive = *pctsPath - _T('a');
else
return FALSE;
fIsLastName = pctsPath[2] == NULL || pctsPath[2] == _T('\\') && pctsPath[3] == NULL;
pPrevChild = NULL;
pChild = m_pFirstChild;
while ( pChild && (int)pChild->m_ptsName < nDrive )
{
pPrevChild = pChild;
pChild = pChild->m_pNextSibling;
}
if ( pChild && nDrive == (int)pChild->m_ptsName )
{
if ( fIsLastName )
return pChild->SetItemData(pctsPath, NULL, 0, CParsedPathItem::EXCLUDE_ITEM | CParsedPathItem::DRIVE_ITEM);
else
return pChild->AddExcludePath(pctsPath + 3, fUnderIncludePath);
}
if ( !fUnderIncludePath )
return FALSE;
else
{
pChild = new CParsedPathItem(this, pctsPath, NULL, 0, fIsLastName ? (CParsedPathItem::EXCLUDE_ITEM | CParsedPathItem::DRIVE_ITEM) : (CParsedPathItem::INTERMEDIA_ITEM | CParsedPathItem::DRIVE_ITEM));
if ( pPrevChild == NULL )
{
pChild->m_pNextSibling = m_pFirstChild;
m_pFirstChild = pChild;
}
else
{
pChild->m_pNextSibling = pPrevChild->m_pNextSibling;
pPrevChild->m_pNextSibling = pChild;
}
if ( fIsLastName )
return TRUE;
else
return pChild->AddExcludePath(pctsPath + 3, fUnderIncludePath);
}
}
case CParsedPathItem::DRIVE_ITEM:
case CParsedPathItem::DIRECTORY_OR_FILE_ITEM:
{
CParsedPathItem *pPrevChild = NULL, *pChild = m_pFirstChild;
TCHAR tsPathName[MAX_PATH];
int nLen;
BOOL fIsLastName;
int nCompare;
for ( nLen = 0; pctsPath[nLen] && pctsPath[nLen] != _T('\\'); nLen++ )
tsPathName[nLen] = LOWER(pctsPath[nLen]);
tsPathName[nLen] = NULL;
fIsLastName = pctsPath[nLen] == NULL || pctsPath[nLen] == _T('\\') && pctsPath[nLen + 1] == NULL;
nCompare = -1;
while ( pChild && (nLen != *(pChild->m_ptsName - 1) || (nCompare = _tcsncmp(pChild->m_ptsName, tsPathName, nLen)) < 0) )
{
pPrevChild = pChild;
pChild = pChild->m_pNextSibling;
}
if ( pChild && nCompare == 0 )
{
if ( fIsLastName )
return pChild->SetItemData(tsPathName, NULL, 0, CParsedPathItem::EXCLUDE_ITEM | CParsedPathItem::DIRECTORY_OR_FILE_ITEM);
else
return pChild->AddExcludePath(pctsPath + nLen + 1, fUnderIncludePath);
}
if ( !fUnderIncludePath )
return FALSE;
else
{
pChild = new CParsedPathItem(this, tsPathName, NULL, 0, fIsLastName ? (CParsedPathItem::EXCLUDE_ITEM | CParsedPathItem::DIRECTORY_OR_FILE_ITEM) : (CParsedPathItem::INTERMEDIA_ITEM | CParsedPathItem::DIRECTORY_OR_FILE_ITEM));
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -