⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filebackup.cpp

📁 实时文件备份
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					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 + -