mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
248 lines
8.0 KiB
248 lines
8.0 KiB
#include "stdafx.h"
|
|
#include "import.h"
|
|
#include "registry.h"
|
|
#include "machine.h"
|
|
#include "base.h"
|
|
#include "copydlg.h"
|
|
#include "diskloca.h"
|
|
#include "lzexpand.h"
|
|
#include "copyfile.h"
|
|
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
DWORD CopySingleFile( LPVOID param );
|
|
|
|
CCopyFile::CCopyFile()
|
|
{
|
|
}
|
|
|
|
void CCopyFile::CopyFile( CCopyDlg *pParent, int iDisk, CString strSrc, CString strDest, BOOL fSkipCheck )
|
|
{
|
|
m_pParent = pParent;
|
|
m_iDisk = iDisk;
|
|
m_strSrc = strSrc;
|
|
m_strDest = strDest;
|
|
m_fSkipCheck = fSkipCheck;
|
|
|
|
DWORD id;
|
|
|
|
CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)CopySingleFile, (LPVOID)this, 0, &id );
|
|
}
|
|
|
|
DWORD CopySingleFile( LPVOID param )
|
|
{
|
|
// set the display string
|
|
CCopyFile *item = (CCopyFile*)param;
|
|
CCopyDlg *m_pParent = item->m_pParent;
|
|
int m_iDisk = item->m_iDisk;
|
|
CString m_strSrc = item->m_strSrc;
|
|
CString m_strDest = item->m_strDest;
|
|
BOOL m_fSkipCheck = item->m_fSkipCheck;
|
|
|
|
m_pParent->m_From.SetWindowText( m_strSrc );
|
|
m_pParent->m_To.SetWindowText( m_strDest );
|
|
|
|
// open tag file first
|
|
CString strDisk = _T("..\\inetsrv");
|
|
|
|
CString str_Src = m_strSrc;
|
|
str_Src.SetAt((str_Src.GetLength()-1), _T('_'));
|
|
|
|
do
|
|
{
|
|
if ( !m_fSkipCheck )
|
|
{
|
|
CFileStatus status;
|
|
if ( !CFile::GetStatus( strDisk, status ))
|
|
{
|
|
// ask for disk location
|
|
CString strMsg;
|
|
strMsg.LoadString((theApp.TargetMachine.m_actualProductType==PT_WINNT)?IDS_DISK_LOCATION_NTW: IDS_DISK_LOCATION_NTS );
|
|
|
|
CDiskLocation DiskLocDlg( strMsg, m_pParent );
|
|
if ( DiskLocDlg.DoModal() == IDCANCEL )
|
|
{
|
|
m_pParent->PostMessage( WM_CANCELCOPY );
|
|
return TRUE;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
} while (TRUE);
|
|
|
|
INT err;
|
|
INT fSrc;
|
|
INT fDest;
|
|
|
|
do
|
|
{
|
|
OFSTRUCT ofstruct;
|
|
|
|
// open source file
|
|
do
|
|
{
|
|
if ((( fSrc = LZOpenFile( (LPSTR)(LPCSTR)str_Src, &ofstruct, OF_READ | OF_SHARE_DENY_NONE )) < 0 ) &&
|
|
(( fSrc = LZOpenFile( (LPSTR)(LPCSTR)m_strSrc, &ofstruct, OF_READ | OF_SHARE_DENY_NONE )) < 0 ))
|
|
{
|
|
// cannot open src file
|
|
|
|
LZClose(fSrc);
|
|
|
|
CString strFmt;
|
|
|
|
strFmt.LoadString( IDS_CANNOT_OPEN_SRC_FILE );
|
|
|
|
CString strError;
|
|
CString strFilename = m_pParent->GetFilename( m_strSrc );
|
|
strError.Format( strFmt, strFilename );
|
|
|
|
CString strCaption;
|
|
strCaption.LoadString(( theApp.TargetMachine.m_actualProductType == PT_WINNT )?IDS_WINNT_LOGO:IDS_LANMAN_LOGO );
|
|
|
|
UINT iMsg = m_pParent->MessageBox( strError, strCaption, MB_ABORTRETRYIGNORE );
|
|
switch ( iMsg )
|
|
{
|
|
case IDIGNORE:
|
|
m_pParent->PostMessage( WM_COPY_A_FILE );
|
|
return TRUE;
|
|
case IDRETRY:
|
|
break;
|
|
case IDABORT:
|
|
theApp.m_fTerminate = TRUE;
|
|
m_pParent->PostMessage( WM_CANCELCOPY );
|
|
return FALSE;
|
|
}
|
|
} else
|
|
{
|
|
break;
|
|
}
|
|
} while ( TRUE );
|
|
|
|
// open desination file
|
|
do
|
|
{
|
|
// move the desintation file
|
|
CFileStatus status;
|
|
|
|
if ( CFile::GetStatus( m_strDest, status ))
|
|
{
|
|
// well, we need to remove it
|
|
|
|
// try to remove it
|
|
if ( !DeleteFile( m_strDest ))
|
|
{
|
|
// cannot remove it
|
|
TCHAR TmpName[BUF_SIZE];
|
|
CString strFullName = status.m_szFullName;
|
|
|
|
INT nIndex = strFullName.ReverseFind( _T('\\'));
|
|
CString strPath;
|
|
|
|
if ( nIndex != (-1))
|
|
{
|
|
strPath = m_strDest.Left( nIndex + 1 );
|
|
}
|
|
|
|
if ( GetTempFileName( strPath, _T("INT"), 0, TmpName ) == 0 )
|
|
{
|
|
// well no hope...
|
|
// don't copy
|
|
LZClose( fSrc );
|
|
m_pParent->PostMessage( WM_COPY_A_FILE );
|
|
return TRUE;
|
|
}
|
|
|
|
// okay, we have a tmp name
|
|
// let move the destination to tmpname and
|
|
if (!MoveFileEx( m_strDest, TmpName, MOVEFILE_REPLACE_EXISTING|MOVEFILE_COPY_ALLOWED ))
|
|
{
|
|
LZClose(fSrc);
|
|
m_pParent->PostMessage(WM_COPY_A_FILE);
|
|
return TRUE;
|
|
}
|
|
MoveFileEx( TmpName, NULL, MOVEFILE_DELAY_UNTIL_REBOOT );
|
|
}
|
|
// continue to copy....
|
|
}
|
|
|
|
if (( fDest = LZOpenFile( (LPSTR)(LPCSTR)m_strDest, &ofstruct, OF_CREATE | OF_WRITE | OF_SHARE_DENY_NONE )) < 0 )
|
|
{
|
|
// cannot open dest file
|
|
|
|
LZClose(fDest);
|
|
|
|
CString strFmt;
|
|
|
|
strFmt.LoadString( IDS_CANNOT_OPEN_DEST_FILE );
|
|
|
|
CString strError;
|
|
CString strFilename = m_pParent->GetFilename( m_strSrc );
|
|
strError.Format( strFmt, strFilename );
|
|
|
|
CString strCaption;
|
|
strCaption.LoadString(( theApp.TargetMachine.m_actualProductType == PT_WINNT )?IDS_WINNT_LOGO:IDS_LANMAN_LOGO );
|
|
|
|
UINT iMsg = m_pParent->MessageBox( strError, strCaption, MB_ABORTRETRYIGNORE );
|
|
switch ( iMsg )
|
|
{
|
|
case IDIGNORE:
|
|
m_pParent->PostMessage( WM_COPY_A_FILE );
|
|
return TRUE;
|
|
case IDRETRY:
|
|
break;
|
|
case IDABORT:
|
|
theApp.m_fTerminate = TRUE;
|
|
m_pParent->PostMessage( WM_CANCELCOPY );
|
|
return FALSE;
|
|
}
|
|
} else
|
|
{
|
|
break;
|
|
}
|
|
} while ( TRUE );
|
|
|
|
if (( err = LZCopy( fSrc, fDest )) < 0 )
|
|
{
|
|
CString strFmt;
|
|
|
|
strFmt.LoadString( IDS_CANNOT_COPY_FILE );
|
|
|
|
CString strError;
|
|
CString strFilename = m_pParent->GetFilename( m_strSrc );
|
|
strError.Format( strFmt, strFilename );
|
|
|
|
LZClose( fSrc );
|
|
LZClose( fDest );
|
|
|
|
CString strCaption;
|
|
strCaption.LoadString(( theApp.TargetMachine.m_actualProductType == PT_WINNT )?IDS_WINNT_LOGO:IDS_LANMAN_LOGO );
|
|
|
|
UINT iMsg = m_pParent->MessageBox( strError, strCaption, MB_ABORTRETRYIGNORE );
|
|
switch ( iMsg )
|
|
{
|
|
case IDIGNORE:
|
|
m_pParent->PostMessage( WM_COPY_A_FILE );
|
|
return TRUE;
|
|
case IDRETRY:
|
|
break;
|
|
case IDABORT:
|
|
theApp.m_fTerminate = TRUE;
|
|
m_pParent->PostMessage( WM_CANCELCOPY );
|
|
return FALSE;
|
|
}
|
|
} else
|
|
{
|
|
LZClose( fSrc );
|
|
LZClose( fDest );
|
|
break;
|
|
}
|
|
} while (TRUE);
|
|
|
|
m_pParent->PostMessage( WM_COPY_A_FILE );
|
|
//SetEvent(m_hEventThreadKilled);
|
|
return TRUE;
|
|
}
|