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

📄 simplefilebackup.cpp

📁 实时文件备份
💻 CPP
📖 第 1 页 / 共 4 页
字号:
						case PROGRESS_QUIT_AFTER_FINISH_THIS_FILE:
						case PROGRESS_QUIT_AFTER_FINISH_THIS_OPERATION:
							return ERROR_CANCELLED;
						case PROGRESS_QUIT_AFTER_ALL_EXISTING_OPERATION:
							if ( IsMessageQueueEmpty() )
								return ERROR_SUCCESS;
						}
					}
					break;

				case UWM_POST_SCHEDULED_COPY_FILES:
					if ( !m_pRevisionInfo )
						ReturnMessageResult(wParam, ERROR_NOT_READY);
					else
					{
						ReturnMessageResult(wParam, ScheduledCopyFiles((PSCHEDULEDCOPYFILES_BUFFER)lParam));
						switch ( m_nProgressStatus )
						{
						case PROGRESS_CANCEL:
						case PROGRESS_STOP:
						case PROGRESS_QUIT_AFTER_FINISH_THIS_FILE:
						case PROGRESS_QUIT_AFTER_FINISH_THIS_OPERATION:
							return ERROR_CANCELLED;
						case PROGRESS_QUIT_AFTER_ALL_EXISTING_OPERATION:
							if ( IsMessageQueueEmpty() )
								return ERROR_SUCCESS;
						}
					}
					break;
				}
				if ( m_nProgressStatus == PROGRESS_QUIT_AFTER_ALL_EXISTING_OPERATION && IsMessageQueueEmpty() )
					return ERROR_SUCCESS;
			}
		}
		else
		{
			if ( dwWaitResult == WAIT_ABANDONED_0 )
			{
				//	Somthing wrong with the message queue
				DWORD dwErrorCode = ::GetLastError();

				ErrorCallback(COPYFILES_MESSAGE_QUEUE_SEMAPHORE_ABANDONED, NULL, NULL, dwErrorCode, 0);
				return dwErrorCode;
			}
			else
			{
				//	WaitForSingleObject function failed
				DWORD dwErrorCode = ::GetLastError();

				switch ( ErrorCallback(COPYFILES_WAITFORSINGLEOBJECT_FAILED, NULL, NULL, dwErrorCode, 0) )
				{
				case PROGRESS_CANCEL:
				case PROGRESS_STOP:
					return dwErrorCode;
				}
			}
		}
	}
	return ERROR_SUCCESS;
}

UINT AFX_CDECL CSimpleFileBackup::CWin9xCopyFileThread::CopyFileThreadProc()
{
	DWORD dwWaitResult;
	UINT nMsg;
	WPARAM wParam;
	LPARAM lParam;

	while ( 1 )
	{
		dwWaitResult = ::WaitForSingleObject(m_hMessageQueueSemaphore, INFINITE);
		if ( dwWaitResult == WAIT_OBJECT_0 )
		{
			//	Got new message
			if ( PeekFirstMessage(nMsg, wParam, lParam) )
			{
				switch ( nMsg )
				{
				case UWM_CANCELALLREALTIMECOPYFILESMESSAGE:
					OnCancelAllRealtimeCopyFilesMessage();
					ReturnMessageResult(wParam, ERROR_SUCCESS);
					break;

				case UWM_DESTROY_WORKERTHREAD:
					if ( !IsMessageQueueEmpty() )
					{
						switch ( ErrorCallback(COPYFILES_TERMINATE_WHILE_MESSAGE_QUEUE_NOT_EMPTY, NULL, NULL, 0, 0) )
						{
						case PROGRESS_CONTINUE:
						case PROGRESS_QUIET:
						case PROGRESS_QUIT_AFTER_FINISH_THIS_FILE:
						case PROGRESS_QUIT_AFTER_FINISH_THIS_OPERATION:
							ReturnMessageResult(wParam, ERROR_CANCELLED);
							break;
						case PROGRESS_CANCEL:
						case PROGRESS_STOP:
							ReturnMessageResult(wParam, ERROR_CANCELLED);
							return ERROR_CANCELLED;
						case PROGRESS_QUIT_AFTER_ALL_EXISTING_OPERATION:
							m_nProgressStatus = PROGRESS_QUIT_AFTER_ALL_EXISTING_OPERATION;
							CMessageQueue::BlockNewMessage();
							ReturnMessageResult(wParam, ERROR_SIGNAL_PENDING);
						}
						break;
					}
					else
					{
						ReturnMessageResult(wParam, ERROR_SUCCESS);
						return ERROR_SUCCESS;
					}

				case UWM_START_REVISION_CONTROL:
					ReturnMessageResult(wParam, OnStartRevisionControl((CRevisionInfo*)lParam));
					break;

				case UWM_STOP_REVISION_CONTROL:
					ReturnMessageResult(wParam, OnStopRevisionControl());
					break;

				case UWM_SET_REVISION_INFO:
					ReturnMessageResult(wParam, OnSetRevisionInfo((CRevisionInfo*)lParam));
					break;

				case UWM_POST_REALTIME_COPY_FILES:
					if ( !m_pRevisionInfo )
						ReturnMessageResult(wParam, ERROR_NOT_READY);
					else
					{
						ReturnMessageResult(wParam, RealtimeCopyFiles((PCOPYFILES_BUFFER)lParam));
						switch ( m_nProgressStatus )
						{
						case PROGRESS_CANCEL:
						case PROGRESS_STOP:
						case PROGRESS_QUIT_AFTER_FINISH_THIS_FILE:
						case PROGRESS_QUIT_AFTER_FINISH_THIS_OPERATION:
							return ERROR_CANCELLED;
						case PROGRESS_QUIT_AFTER_ALL_EXISTING_OPERATION:
							if ( IsMessageQueueEmpty() )
								return ERROR_SUCCESS;
						}
					}
					break;

				case UWM_POST_SCHEDULED_COPY_FILES:
					if ( !m_pRevisionInfo )
						ReturnMessageResult(wParam, ERROR_NOT_READY);
					else
					{
						ReturnMessageResult(wParam, ScheduledCopyFiles((PSCHEDULEDCOPYFILES_BUFFER)lParam));
						switch ( m_nProgressStatus )
						{
						case PROGRESS_CANCEL:
						case PROGRESS_STOP:
						case PROGRESS_QUIT_AFTER_FINISH_THIS_FILE:
						case PROGRESS_QUIT_AFTER_FINISH_THIS_OPERATION:
							return ERROR_CANCELLED;
						case PROGRESS_QUIT_AFTER_ALL_EXISTING_OPERATION:
							if ( IsMessageQueueEmpty() )
								return ERROR_SUCCESS;
						}
					}
					break;
				}
				if ( m_nProgressStatus == PROGRESS_QUIT_AFTER_ALL_EXISTING_OPERATION && IsMessageQueueEmpty() )
					return ERROR_SUCCESS;
			}
		}
		else
		{
			if ( dwWaitResult == WAIT_ABANDONED_0 )
			{
				//	Somthing wrong with the message queue
				DWORD dwErrorCode = ::GetLastError();

				ErrorCallback(COPYFILES_MESSAGE_QUEUE_SEMAPHORE_ABANDONED, NULL, NULL, dwErrorCode, 0);
				return dwErrorCode;
			}
			else
			{
				//	WaitForSingleObject function failed
				DWORD dwErrorCode = ::GetLastError();

				switch ( ErrorCallback(COPYFILES_WAITFORSINGLEOBJECT_FAILED, NULL, NULL, dwErrorCode, 0) )
				{
				case PROGRESS_CANCEL:
				case PROGRESS_STOP:
					return dwErrorCode;
				}
			}
		}
	}
	return ERROR_SUCCESS;
}

UINT AFX_CDECL CSimpleFileBackup::CWinNTFileEnumeratorThread::FileEnumeratorThreadProc()
{
	DWORD dwWaitResult;
	UINT nMsg;
	WPARAM wParam;
	LPARAM lParam;

	while ( 1 )
	{
		dwWaitResult = ::WaitForSingleObject(m_hMessageQueueSemaphore, INFINITE);
		if ( dwWaitResult == WAIT_OBJECT_0 )
		{
			//	Got new message
			if ( PeekFirstMessage(nMsg, wParam, lParam) )
			{
				switch ( nMsg )
				{
				case UWM_DESTROY_WORKERTHREAD:
					ReturnMessageResult(wParam, ERROR_SUCCESS);
					return ERROR_SUCCESS;
				case UWM_START_INSTANT_BACKUP:
					m_fStopThread = FALSE;
					ReturnMessageResult(wParam, OnStartInstantBackup((CFileFilter*)lParam));
					if ( m_fStopThread )
						return ERROR_SUCCESS;
					break;
				case UWM_STOP_INSTANT_BACKUP:
					ReturnMessageResult(wParam, ERROR_SUCCESS);
					break;
				}
			}
		}
		else
		{
			if ( dwWaitResult == WAIT_ABANDONED_0 )
			{
				//	Somthing wrong with the message queue
				DWORD dwErrorCode = ::GetLastError();

				ErrorCallback(ENUMERATEFILE_MESSAGE_QUEUE_SEMAPHORE_ABANDONED, NULL, NULL, dwErrorCode);
				return dwErrorCode;
			}
			else
			{
				//	WaitForSingleObject function failed
				DWORD dwErrorCode = ::GetLastError();

				switch ( ErrorCallback(ENUMERATEFILE_WAITFORSINGLEOBJECT_FAILED, NULL, NULL, dwErrorCode) )
				{
				case PROGRESS_CANCEL:
				case PROGRESS_STOP:
					return dwErrorCode;
				}
			}
		}
	}
	return ERROR_SUCCESS;
}

UINT AFX_CDECL CSimpleFileBackup::CWin9xFileEnumeratorThread::FileEnumeratorThreadProc()
{
	DWORD dwWaitResult;
	UINT nMsg;
	WPARAM wParam;
	LPARAM lParam;

	while ( 1 )
	{
		dwWaitResult = ::WaitForSingleObject(m_hMessageQueueSemaphore, INFINITE);
		if ( dwWaitResult == WAIT_OBJECT_0 )
		{
			//	Got new message
			if ( PeekFirstMessage(nMsg, wParam, lParam) )
			{
				switch ( nMsg )
				{
				case UWM_DESTROY_WORKERTHREAD:
					ReturnMessageResult(wParam, ERROR_SUCCESS);
					return ERROR_SUCCESS;
				case UWM_START_INSTANT_BACKUP:
					m_fStopThread = FALSE;
					ReturnMessageResult(wParam, OnStartInstantBackup((CFileFilter*)lParam));
					if ( m_fStopThread )
						return ERROR_SUCCESS;
					break;
				case UWM_STOP_INSTANT_BACKUP:
					ReturnMessageResult(wParam, ERROR_SUCCESS);
					break;
				}
			}
		}
		else
		{
			if ( dwWaitResult == WAIT_ABANDONED_0 )
			{
				//	Somthing wrong with the message queue
				DWORD dwErrorCode = ::GetLastError();

				ErrorCallback(ENUMERATEFILE_MESSAGE_QUEUE_SEMAPHORE_ABANDONED, NULL, NULL, dwErrorCode);
				return dwErrorCode;
			}
			else
			{
				//	WaitForSingleObject function failed
				DWORD dwErrorCode = ::GetLastError();

				switch ( ErrorCallback(ENUMERATEFILE_WAITFORSINGLEOBJECT_FAILED, NULL, NULL, dwErrorCode) )
				{
				case PROGRESS_CANCEL:
				case PROGRESS_STOP:
					return dwErrorCode;
				}
			}
		}
	}
	return ERROR_SUCCESS;
}

DWORD WINAPI SimpleFileBackupCallback(PFILEBACKUP_CALLBACK_PARAM lParam);
int TrySimpleFileBackup(int argc, TCHAR* argv[])
{
#if 1
	CSimpleFileBackup::CFileFilter 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("*.txt;*.htm;*.html"), TRUE, 0, NULL, TRUE},
//		{_T("E:\\Working\\Test\\SyncTest\\Copy of Test2"), _T("*.htm;*.html"), FALSE, 0, NULL, TRUE},
		{_T("F:\\Working\\Test\\SyncTest\\Copy of Test1"), _T("*.txt;*.htm;*.html"), TRUE, 0, NULL, TRUE},
		{_T("F:\\Working\\Test\\SyncTest\\Copy of Test2"), _T("*.htm;*.html"), FALSE, 0, NULL, TRUE},
//		{_T("G:\\Backup Test\\Copy of Test1"), _T("*.txt;*.wma;*.rar"), TRUE, 0, NULL, TRUE},
//		{_T("G:\\Backup Test\\Copy of Test2"), _T("*.txt"), 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")},
		{_T("F:\\Working\\Test\\SyncTest\\Copy of Test2\\DriverStudio 2.7.rar")},
		{_T("F:\\Working\\Test\\SyncTest\\Copy of Test2\\TestFolder")},
//		{_T("G:\\Backup Test\\Copy of Test2\\TEST.txt")},
//		{_T("G:\\Backup Test\\Copy of Test2\\2")},
	};
/*
	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"),

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -