?? filebackup.cpp
字號:
return pChild->SetItemData(pcsPath, pcsFilenameMask, pdwFileAttributesMask ? *pdwFileAttributesMask : 0, dwFlags);
else
return pChild->AddIncludePath(pcsPath + 3, pcsFilenameMask, fIsIncludeFilenameMask, pdwFileAttributesMask, fIsIncludeFileAttributesMask);
}
else
{
pChild = new CParsedPathItemA(this, pcsPath, pcsFilenameMask, 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(pcsPath + 3, pcsFilenameMask, fIsIncludeFilenameMask, pdwFileAttributesMask, fIsIncludeFileAttributesMask);
}
}
case CParsedPathItemA::DRIVE_ITEM:
case CParsedPathItemA::DIRECTORY_OR_FILE_ITEM:
{
CParsedPathItemA *pPrevChild = NULL, *pChild = m_pFirstChild;
char sPathName[MAX_PATH];
int nLen;
BOOL fIsLastName;
DWORD dwFlags = 0;
int nCompare;
for ( nLen = 0; pcsPath[nLen] && pcsPath[nLen] != '\\'; nLen++ )
sPathName[nLen] = LOWER(pcsPath[nLen]);
sPathName[nLen] = NULL;
if ( (fIsLastName = pcsPath[nLen] == NULL || pcsPath[nLen] == '\\' && pcsPath[nLen + 1] == NULL) )
{
dwFlags = CParsedPathItemA::DIRECTORY_OR_FILE_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::DIRECTORY_OR_FILE_ITEM | CParsedPathItemA::INTERMEDIA_ITEM;
nCompare = -1;
while ( pChild && (nLen != pChild->m_nNameLength || (nCompare = ::strncmp(pChild->m_psName, sPathName, nLen)) < 0) )
{
pPrevChild = pChild;
pChild = pChild->m_pNextSibling;
}
if ( pChild && nCompare == 0 )
{
if ( fIsLastName )
return pChild->SetItemData(sPathName, pcsFilenameMask, pdwFileAttributesMask ? *pdwFileAttributesMask : 0, dwFlags);
else
return pChild->AddIncludePath(pcsPath + nLen + 1, pcsFilenameMask, fIsIncludeFilenameMask, pdwFileAttributesMask, fIsIncludeFileAttributesMask);
}
else
{
pChild = new CParsedPathItemA(this, sPathName, pcsFilenameMask, 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(pcsPath + nLen + 1, pcsFilenameMask, fIsIncludeFilenameMask, pdwFileAttributesMask, fIsIncludeFileAttributesMask);
}
}
}
return FALSE;
}
BOOL CFileBackup::CFileFilterA::CParsedPathItemA::AddExcludePath(LPCSTR pcsPath, BOOL fUnderIncludePath)
{
switch ( m_dwFlags & CParsedPathItemA::ITEM_TYPE_MASK )
{
case CParsedPathItemA::EXCLUDE_ITEM:
return FALSE;
case CParsedPathItemA::INCLUDE_ITEM:
fUnderIncludePath = TRUE;
}
switch ( m_dwFlags & CParsedPathItemA::ITEM_MASK )
{
case CParsedPathItemA::ROOT_ITEM:
{
CParsedPathItemA *pPrevChild, *pChild;
int nDrive;
BOOL fIsLastName;
if ( pcsPath[1] != ':' )
return FALSE;
else if ( *pcsPath >= 'A' && *pcsPath <= 'Z' )
nDrive = *pcsPath - 'A';
else if ( *pcsPath >= 'a' && *pcsPath <= 'z' )
nDrive = *pcsPath - 'a';
else
return FALSE;
fIsLastName = pcsPath[2] == NULL || pcsPath[2] == '\\' && pcsPath[3] == NULL;
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 )
return pChild->SetItemData(pcsPath, (LPCSTR)NULL, 0, CParsedPathItemA::EXCLUDE_ITEM | CParsedPathItemA::DRIVE_ITEM);
else
return pChild->AddExcludePath(pcsPath + 3, fUnderIncludePath);
}
if ( !fUnderIncludePath )
return FALSE;
else
{
pChild = new CParsedPathItemA(this, pcsPath, (LPCSTR)NULL, 0, fIsLastName ? (CParsedPathItemA::EXCLUDE_ITEM | CParsedPathItemA::DRIVE_ITEM) : (CParsedPathItemA::INTERMEDIA_ITEM | CParsedPathItemA::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(pcsPath + 3, fUnderIncludePath);
}
}
case CParsedPathItemA::DRIVE_ITEM:
case CParsedPathItemA::DIRECTORY_OR_FILE_ITEM:
{
CParsedPathItemA *pPrevChild = NULL, *pChild = m_pFirstChild;
char sPathName[MAX_PATH];
int nLen;
BOOL fIsLastName;
int nCompare;
for ( nLen = 0; pcsPath[nLen] && pcsPath[nLen] != '\\'; nLen++ )
sPathName[nLen] = LOWER(pcsPath[nLen]);
sPathName[nLen] = NULL;
fIsLastName = pcsPath[nLen] == NULL || pcsPath[nLen] == _T('\\') && pcsPath[nLen + 1] == NULL;
nCompare = -1;
while ( pChild && (nLen != pChild->m_nNameLength || (nCompare = ::strncmp(pChild->m_psName, sPathName, nLen)) < 0) )
{
pPrevChild = pChild;
pChild = pChild->m_pNextSibling;
}
if ( pChild && nCompare == 0 )
{
if ( fIsLastName )
return pChild->SetItemData(sPathName, (LPCSTR)NULL, 0, CParsedPathItemA::EXCLUDE_ITEM | CParsedPathItemA::DIRECTORY_OR_FILE_ITEM);
else
return pChild->AddExcludePath(pcsPath + nLen + 1, fUnderIncludePath);
}
if ( !fUnderIncludePath )
return FALSE;
else
{
pChild = new CParsedPathItemA(this, sPathName, (LPCSTR)NULL, 0, fIsLastName ? (CParsedPathItemA::EXCLUDE_ITEM | CParsedPathItemA::DIRECTORY_OR_FILE_ITEM) : (CParsedPathItemA::INTERMEDIA_ITEM | CParsedPathItemA::DIRECTORY_OR_FILE_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(pcsPath + nLen + 1, fUnderIncludePath);
}
}
}
return FALSE;
}
DWORD WINAPI FileBackupCallback(PFILEBACKUP_CALLBACK_PARAM lParam);
int TryCompile(int argc, TCHAR* argv[])
{
/*
// CFileBackup objFileBackup;
CFileBackup::CFileFilterA objFileFilter;
struct
{
TCHAR* tsFileFilter;
TCHAR* tsFilenameMask;
BOOL fIncludeFilenameMask;
DWORD dwFileAttributesMask;
DWORD* pdwFileAttributesMask;
BOOL fIncludeFileAttributesMask;
}
arrayIncludeFileFilters[] = {
// {_T(""), _T(""), TRUE, 0, !NULL, TRUE},
{_T("E:\\Working\\Test\\SyncTest\\Copy of Test1"), _T("*.rar;*.txt;*.gif"), TRUE, 0, NULL, TRUE},
{_T("E:\\Working\\Test\\SyncTest\\Copy of Test2"), _T("*.gif"), FALSE, 0, NULL, TRUE},
};
struct
{
TCHAR* tsFileFilter;
}
arrayExcludeFileFilters[] = {
// {_T("")},
{_T("E:\\Working\\Test\\SyncTest\\Copy of Test2\\DriverStudio 2.7.rar")},
{_T("E:\\Working\\Test\\SyncTest\\Copy of Test2\\TestFolder")},
};
TCHAR* tsFilePathname[] = {
// _T(""),
_T("E:\\Working\\Test\\SyncTest\\temp"),
_T("E:\\Working\\Test\\SyncTest\\Copy of Test1\\cnsf\\avatars\\016.gif"),
_T("E:\\Working\\Test\\SyncTest\\Copy of Test1\\cnsf\\avatars\\index.html"),
_T("E:\\Working\\Test\\SyncTest\\Copy of Test2\\cnsf\\avatars\\index.html"),
_T("E:\\Working\\Test\\SyncTest\\Copy of Test2\\cnsf\\avatars\\016.gif"),
_T("E:\\Working\\Test\\SyncTest\\Copy of Test2\\DriverStudio 2.7.rar"),
_T("E:\\Working\\Test\\SyncTest\\Copy of Test2\\TestFolder\\Sample2.txt"),
};
int i;
for ( i = 0; i < sizeof(arrayIncludeFileFilters) / sizeof(*arrayIncludeFileFilters); i++ )
if ( arrayIncludeFileFilters[i].pdwFileAttributesMask )
arrayIncludeFileFilters[i].pdwFileAttributesMask = &arrayIncludeFileFilters[i].dwFileAttributesMask;
for ( i = 0; i < sizeof(arrayIncludeFileFilters) / sizeof(*arrayIncludeFileFilters); i++ )
{
if ( !objFileFilter.AddIncludePath(arrayIncludeFileFilters[i].tsFileFilter, arrayIncludeFileFilters[i].tsFilenameMask, arrayIncludeFileFilters[i].fIncludeFilenameMask, arrayIncludeFileFilters[i].pdwFileAttributesMask, arrayIncludeFileFilters[i].fIncludeFileAttributesMask) )
std::cout << _T("Failed in add include path: ") << arrayIncludeFileFilters[i].tsFileFilter << std::endl;
}
for ( i = 0; i < sizeof(arrayExcludeFileFilters) / sizeof(*arrayExcludeFileFilters); i++ )
{
if ( !objFileFilter.AddExcludePath(arrayExcludeFileFilters[i].tsFileFilter) )
std::cout << _T("Failed in add exclude path: ") << arrayExcludeFileFilters[i].tsFileFilter << std::endl;
}
for ( i = 0; i < sizeof(tsFilePathname) / sizeof(*tsFilePathname); i++ )
{
if ( objFileFilter.MatchFilePathname(tsFilePathname[i]) )
std::cout << _T(" Succeed: ") << tsFilePathname[i] << std::endl;
else
std::cout << _T(" Fail: ") << tsFilePathname[i] << std::endl;
}
{
CString csBasePath;
CFileBackup::CFileFilterA::CParsedPathItemA* pItem;
if ( !objFileFilter.GetDriveBasePath(_T('E'), csBasePath, pItem) )
std::cout << _T("Failed in GetDriveBasePath...") << std::endl;
else
{
std::cout << _T("Get base path: ") << (LPCTSTR)csBasePath << std::endl;
for ( i = 0; i < sizeof(tsFilePathname) / sizeof(*tsFilePathname); i++ )
{
if ( pItem->MatchFilePathname(tsFilePathname[i] + csBasePath.GetLength() + 1) )
std::cout << _T(" Succeed: ") << tsFilePathname[i] << std::endl;
else
std::cout << _T(" Fail: ") << tsFilePathname[i] << std::endl;
}
}
}
*/
return 0;
}
DWORD WINAPI FileBackupCallback(PFILEBACKUP_CALLBACK_PARAM lParam)
{
switch ( lParam->m_dwCallbackType )
{
case LOAD_VXD_ERROR:
//(_T("Failed in loading VxD driver (%s) to hook file system: 0x%08X\n"), lParam->m_pString, lParam->m_dwPercentageOrErrorCode);
break;
}
return PROGRESS_CONTINUE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -