a
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
// MyCopyFile.cpp: implementation of the CMyCopyFile class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "geomative.h"
|
||||
#include "MyCopyFile.h"
|
||||
#include "DetcGD10Dev.h"
|
||||
#include "FileOperTools.h"
|
||||
#ifdef _DEBUG
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[]=__FILE__;
|
||||
#define new DEBUG_NEW
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Construction/Destruction
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
FILE* CMyCopyFile::g_pCopyFileLog = NULL;
|
||||
CRITICAL_SECTION* CMyCopyFile::g_pLogCriticSec = NULL;
|
||||
extern SYSTEMTIME g_sysCurTime;
|
||||
extern BOOL g_bCancelCopyFile;
|
||||
extern int g_iUILanguage;
|
||||
CMyCopyFile::CMyCopyFile()
|
||||
{
|
||||
if (NULL == g_pCopyFileLog)
|
||||
{
|
||||
g_pCopyFileLog = fopen("LOG\\transfer_file.txt","ab+");
|
||||
if (NULL == g_pCopyFileLog)
|
||||
{
|
||||
if (LANG_ZHCN == g_iUILanguage)
|
||||
AfxMessageBox(_T("打开转发文件日志失败"));
|
||||
else
|
||||
MessageBoxEx(NULL, _T("Open transfer file log failed!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||||
}
|
||||
}
|
||||
|
||||
if (NULL == g_pLogCriticSec)
|
||||
{
|
||||
g_pLogCriticSec = new CRITICAL_SECTION;
|
||||
if (NULL == g_pLogCriticSec)
|
||||
{
|
||||
if (LANG_ZHCN == g_iUILanguage)
|
||||
AfxMessageBox(_T("创建临界区失败!"));
|
||||
else
|
||||
MessageBoxEx(NULL, _T("Create CRITICAL_SECTION failed!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||||
}
|
||||
else
|
||||
InitializeCriticalSection(g_pLogCriticSec);
|
||||
}
|
||||
memset(&m_liTotalFileSize, 0, sizeof(m_liTotalFileSize));
|
||||
memset(&m_liTransferedBytes, 0, sizeof(m_liTransferedBytes));
|
||||
m_iErrorCode = -1;
|
||||
m_bIsCancelCopy = FALSE;
|
||||
|
||||
}
|
||||
|
||||
CMyCopyFile::~CMyCopyFile()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMyCopyFile::Initialize()
|
||||
{
|
||||
memset(&m_liTotalFileSize, 0, sizeof(m_liTotalFileSize));
|
||||
memset(&m_liTransferedBytes, 0, sizeof(m_liTransferedBytes));
|
||||
m_iErrorCode = -1;
|
||||
}
|
||||
|
||||
|
||||
void CMyCopyFile::GetTransferInfo(DWORD &dwTransferedBytes, DWORD &dwTotalFileSize)
|
||||
{
|
||||
dwTransferedBytes = m_liTransferedBytes.LowPart;
|
||||
dwTotalFileSize = m_liTotalFileSize.LowPart;
|
||||
}
|
||||
|
||||
bool CMyCopyFile::TransferFile(CString strSrcDir, CString strDstDir, CString strFileName)
|
||||
{
|
||||
CString strText = _T("");
|
||||
CString strDstFilePath = _T("");
|
||||
strDstFilePath.Format(_T("%s\\%s"),strDstDir,strFileName);
|
||||
DeleteFile(strDstFilePath);
|
||||
CString strSrcFilePath = _T("");
|
||||
strSrcFilePath.Format(_T("%s\\%s"),strSrcDir,strFileName);
|
||||
if (INVALID_FILE_ATTRIBUTES == GetFileAttributes(strSrcFilePath))
|
||||
{
|
||||
strText.Empty();
|
||||
strText.Format(_T("Get SrcFile Attributes failed, filepath = %s"),strSrcFilePath);
|
||||
PrintLog(strText);
|
||||
m_iErrorCode = EN_GET_SRCATTRI_FAILED;
|
||||
return false;
|
||||
}
|
||||
m_bIsCancelCopy = FALSE;
|
||||
if (0 == CopyFileEx(strSrcFilePath,strDstFilePath,CopyProgressInfo,(LPVOID)this,
|
||||
&m_bIsCancelCopy,COPY_FILE_FAIL_IF_EXISTS))
|
||||
{
|
||||
m_iErrorCode = GetLastError();
|
||||
strText.Empty();
|
||||
if (ERROR_REQUEST_ABORTED == m_iErrorCode)
|
||||
strText.Format(_T("copy file failed because of progress_routine cancel copy operation,srcfile = %s,dstfile = %s"),
|
||||
strSrcFilePath,strDstFilePath);
|
||||
else
|
||||
strText.Format(_T("copy file failed, errorno = %d, srcfile = %s, dstfile = %s"),
|
||||
m_iErrorCode, strSrcFilePath, strDstFilePath);
|
||||
PrintLog(strText);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void CMyCopyFile::PrintLog(const CString& strLog)
|
||||
{
|
||||
if (NULL == g_pCopyFileLog)
|
||||
{
|
||||
if (LANG_ZHCN == g_iUILanguage)
|
||||
AfxMessageBox(_T("无法写入transfer_log,日志文件点为空"));
|
||||
else
|
||||
MessageBoxEx(NULL, _T("Can't write transfer_log, log File point is NULL"), _T("LOG_ERROR"), MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||||
return;
|
||||
}
|
||||
if (NULL == g_pLogCriticSec)
|
||||
{
|
||||
if (LANG_ZHCN == g_iUILanguage)
|
||||
AfxMessageBox(_T("不能写transfer_log,日志临界切片点为空"));
|
||||
else
|
||||
MessageBoxEx(NULL, _T("Can't write transfer_log, log critical section point is NULL"), _T("LOG_ERROR"), MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||||
return;
|
||||
}
|
||||
EnterCriticalSection(g_pLogCriticSec);
|
||||
CString strOutPut = _T("");
|
||||
strOutPut.Format(_T("%04d-%02d-%02d %02d:%02d:%02d.%03d %s \r\n"),g_sysCurTime.wYear, g_sysCurTime.wMonth, g_sysCurTime.wDay,
|
||||
g_sysCurTime.wHour, g_sysCurTime.wMinute, g_sysCurTime.wSecond, g_sysCurTime.wMilliseconds, strLog);
|
||||
fwrite(strOutPut, 1, strOutPut.GetLength(), g_pCopyFileLog);
|
||||
fflush(g_pCopyFileLog);
|
||||
LeaveCriticalSection(g_pLogCriticSec);
|
||||
}
|
||||
|
||||
DWORD CALLBACK CMyCopyFile::CopyProgressInfo(LARGE_INTEGER iTotalFileSize, LARGE_INTEGER iTotalBytesTransferred, LARGE_INTEGER iStreamSize,
|
||||
LARGE_INTEGER iStreamBytesTransferred, DWORD dwStreamNumber, DWORD dwCallbackReason,
|
||||
HANDLE hSourceFile, HANDLE hDestinationFile, LPVOID lpData)
|
||||
{
|
||||
CMyCopyFile* pCopyFile = (CMyCopyFile*)lpData;
|
||||
pCopyFile->m_liTotalFileSize = iTotalFileSize;
|
||||
pCopyFile->m_liTransferedBytes = iTotalBytesTransferred;
|
||||
//如果此时发现USB设备被拔出,则取消传输
|
||||
if (FALSE == CDetcGD10Dev::GetInstance()->IsGD10DevConnect())
|
||||
{
|
||||
CString strLog = _T("");
|
||||
strLog.Format(_T("[CopyFile][%d]Usb device was pull out,copy file was canceled!"), __LINE__);
|
||||
CFileOperTools::GetInstance()->WriteComLog(strLog);
|
||||
return PROGRESS_CANCEL;
|
||||
}
|
||||
return PROGRESS_CONTINUE;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user