📄 simplefilebackup.cpp
字号:
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 + -