DragonNest/Common/Utility/Directory.cpp

764 lines
26 KiB
C++
Raw Permalink Normal View History

///////////////////////////////////////////////////////////////////
// INCLUDE
///////////////////////////////////////////////////////////////////
#include "STDAFX.H"
#include "DIRECTORY.H"
#include "COMMONMACROS.H"
#include "BASESET.H"
#include "DEBUGUTIL.H"
#include "SAFESTRINGMACROS.H"
#include "STRINGSET.H"
#include <IO.H> // _access
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
const TCHAR CDirectory::m_szSourceDirectorySeperator[3] = {
_T('\\'),
_T(':'),
_T('\0'), // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD>
};
///////////////////////////////////////////////////////////////////
// IMPLEMENTATION
///////////////////////////////////////////////////////////////////
//*---------------------------------------------------------------
// TYPE : FUNCTION
// NAME : CDirectory::CDirectory
//*---------------------------------------------------------------
// DESC : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// PARM : N/A
// RETV : N/A
// PRGM : B4nFter
//*---------------------------------------------------------------
CDirectory::CDirectory()
{
Reset();
};
//*---------------------------------------------------------------
// TYPE : FUNCTION
// NAME : CDirectory::~CDirectory
//*---------------------------------------------------------------
// DESC : <20>Ҹ<EFBFBD><D2B8><EFBFBD>
// PARM : N/A
// RETV : N/A
// PRGM : B4nFter
//*---------------------------------------------------------------
CDirectory::~CDirectory()
{
// <20><>ü <20>Ҹ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʵ<EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD>
End();
}
//*---------------------------------------------------------------
// TYPE : FUNCTION
// NAME : CDirectory::Reset
//*---------------------------------------------------------------
// DESC : <20><>ü <20>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD>
// PARM : N/A
// RETV : N/A
// PRGM : B4nFter
// P.S.>
// - <20>ڵ<EFBFBD><DAB5><EFBFBD> <20>ݴ°<DDB4><C2B0><EFBFBD> <20>ƴϹǷ<CFB9> <20><><EFBFBD><EFBFBD>
//*---------------------------------------------------------------
VOID CDirectory::Reset()
{
m_hFind = INVALID_HANDLE_VALUE;
}
//*---------------------------------------------------------------
// TYPE : FUNCTION
// NAME : CDirectory::Begin
//*---------------------------------------------------------------
// DESC : Ư<><C6AF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ư<><C6AF> <20><><EFBFBD>ϵ<EFBFBD> <20>˻<EFBFBD> <20><><EFBFBD><EFBFBD>
// PARM : 1 . lpszDirectoryFileName - <20>˻<EFBFBD><CBBB><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD>
// RETV : NOERROR - <20><><EFBFBD><EFBFBD> / <20>׿<EFBFBD> - <20><><EFBFBD><EFBFBD>
// PRGM : B4nFter
//*---------------------------------------------------------------
DWORD CDirectory::Begin(LPCTSTR lpszDirectoryFileName)
{
DN_ASSERT(!IsOpen(), "Already Called!");
// CHECK_STRING(lpszDirectoryFileName, DF_DIR_MAX_PATH);
if (INVALID_HANDLE_VALUE != m_hFind) {
return(1);
}
m_hFind = ::FindFirstFile(lpszDirectoryFileName, &m_stFindData);
if (INVALID_HANDLE_VALUE != m_hFind) {
return(NOERROR);
}
else {
return(::GetLastError());
}
}
//*---------------------------------------------------------------
// TYPE : FUNCTION
// NAME : CDirectory::Next
//*---------------------------------------------------------------
// DESC : CDirectory::Begin ȣ<><C8A3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD> <20><><EFBFBD><EFBFBD>
// PARM : N/A
// RETV : NOERROR - <20><><EFBFBD><EFBFBD> / <20>׿<EFBFBD> - <20><><EFBFBD><EFBFBD>
// PRGM : B4nFter
// P.S.>
// - CDirectory::Begin <20><> <20>ȣ<><C8A3><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD> <20><>
//*---------------------------------------------------------------
DWORD CDirectory::Next()
{
DN_ASSERT(IsOpen(), "Must Call CDirectory::Begin() First!");
if (::FindNextFile(m_hFind, &m_stFindData)) {
return(NOERROR);
}
else {
return(::GetLastError());
}
}
//*---------------------------------------------------------------
// TYPE : FUNCTION
// NAME : CDirectory::End
//*---------------------------------------------------------------
// DESC : <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD><CBBB><EFBFBD> <20><><EFBFBD><EFBFBD>
// PARM : N/A
// RETV : N/A
// PRGM : B4nFter
// P.S.>
// - CDirectory::Begin / CDirectory::Next <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3> <20>Ǿ<EFBFBD><C7BE><EFBFBD> <20><>
//*---------------------------------------------------------------
VOID CDirectory::End()
{
if (INVALID_HANDLE_VALUE != m_hFind) {
::FindClose(m_hFind);
m_hFind = INVALID_HANDLE_VALUE;
}
Reset();
}
//*---------------------------------------------------------------
// TYPE : FUNCTION
// NAME : CDirectory::Copy
//*---------------------------------------------------------------
// DESC : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD>
// PARM : 1 . lpszSourceDirectoryName - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
// 2 . lpszTargetDirectoryName - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
// 4 . bOverWrite - <20><><EFBFBD><EFBFBD><EEBEB2> <20><><EFBFBD><EFBFBD> (<28><EFBFBD><E2BABB> FALSE)
// 5 . bSubDirectory - <20>Ϻ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>丮 Ž<><C5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><EFBFBD><E2BABB> FALSE)
// RETV : NOERROR - <20><><EFBFBD><EFBFBD> / <20>׿<EFBFBD> - <20><><EFBFBD><EFBFBD>
// PRGM : B4nFter
//*---------------------------------------------------------------
DWORD CDirectory::Copy(LPCTSTR lpszSourceDirectoryName, LPCTSTR lpszTargetDirectoryName, BOOL bOverWrite, BOOL bSubDirectory)
{
DN_ASSERT(NULL != lpszSourceDirectoryName, "Invalid!");
DN_ASSERT(NULL != lpszTargetDirectoryName, "Invalid!");
// <20>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD> üũ
if (!lpszSourceDirectoryName || !_tcscmp(lpszSourceDirectoryName, _T(""))) {
DN_RETURN(1);
}
if (!lpszTargetDirectoryName || !_tcscmp(lpszTargetDirectoryName, _T(""))) {
DN_RETURN(1);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><20><>ȿ<EFBFBD><C8BF> üũ
INT iRetVal;
iRetVal = _taccess(lpszSourceDirectoryName, 0);
if (iRetVal) {
// <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
DN_RETURN(static_cast<DWORD>(iRetVal));
}
iRetVal = _taccess(lpszTargetDirectoryName, 0);
if (iRetVal) {
// <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
DN_RETURN(static_cast<DWORD>(iRetVal));
}
TCHAR szSourceDirectoryNameOut[DF_DIR_MAX_PATH] = { _T('\0'), };
TCHAR szTargetDirectoryNameOut[DF_DIR_MAX_PATH] = { _T('\0'), };
DWORD dwRetVal = CheckFixDirectoryName(lpszSourceDirectoryName, lpszTargetDirectoryName, szSourceDirectoryNameOut, COUNT_OF(szSourceDirectoryNameOut), szTargetDirectoryNameOut, COUNT_OF(szTargetDirectoryNameOut));
if (NOERROR != dwRetVal) {
DN_RETURN(dwRetVal);
}
// <20><><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD> <20><><EFBFBD><EFBFBD> (<28>۾<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
dwRetVal = CopyWork(
szSourceDirectoryNameOut,
szTargetDirectoryNameOut,
FALSE,
bOverWrite,
bSubDirectory
);
if (NOERROR != dwRetVal) {
DN_RETURN(dwRetVal);
}
return(NOERROR);
}
//*---------------------------------------------------------------
// TYPE : FUNCTION
// NAME : CDirectory::Move
//*---------------------------------------------------------------
// DESC : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20>̵<EFBFBD>
// PARM : 1 . lpszSourceDirectoryName - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
// 2 . lpszTargetDirectoryName - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
// 4 . bOverWrite - <20><><EFBFBD><EFBFBD><EEBEB2> <20><><EFBFBD><EFBFBD> (<28><EFBFBD><E2BABB> FALSE)
// 5 . bSubDirectory - <20>Ϻ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>丮 Ž<><C5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><EFBFBD><E2BABB> FALSE)
// RETV : NOERROR - <20><><EFBFBD><EFBFBD> / <20>׿<EFBFBD> - <20><><EFBFBD><EFBFBD>
// PRGM : B4nFter
//*---------------------------------------------------------------
DWORD CDirectory::Move(LPCTSTR lpszSourceDirectoryName, LPCTSTR lpszTargetDirectoryName, BOOL bOverWrite, BOOL bSubDirectory)
{
DN_ASSERT(NULL != lpszSourceDirectoryName, "Invalid!");
DN_ASSERT(NULL != lpszTargetDirectoryName, "Invalid!");
// <20>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD> üũ
if (!lpszSourceDirectoryName || !_tcscmp(lpszSourceDirectoryName, _T(""))) {
DN_RETURN(1);
}
if (!lpszTargetDirectoryName || !_tcscmp(lpszTargetDirectoryName, _T(""))) {
DN_RETURN(1);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><20><>ȿ<EFBFBD><C8BF> üũ
INT iRetVal;
iRetVal = ::_taccess(lpszSourceDirectoryName, 0);
if (iRetVal) {
// <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
DN_RETURN(static_cast<DWORD>(iRetVal));
}
iRetVal = ::_taccess(lpszTargetDirectoryName, 0);
if (iRetVal) {
// <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
DN_RETURN(static_cast<DWORD>(iRetVal));
}
TCHAR szSourceDirectoryNameOut[DF_DIR_MAX_PATH] = { _T('\0'), };
TCHAR szTargetDirectoryNameOut[DF_DIR_MAX_PATH] = { _T('\0'), };
DWORD dwRetVal = CheckFixDirectoryName(lpszSourceDirectoryName, lpszTargetDirectoryName, szSourceDirectoryNameOut, COUNT_OF(szSourceDirectoryNameOut), szTargetDirectoryNameOut, COUNT_OF(szTargetDirectoryNameOut));
if (NOERROR != dwRetVal) {
DN_RETURN(dwRetVal);
}
// <20><><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD> <20><><EFBFBD><EFBFBD> (<28>۾<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
dwRetVal = CopyWork(
szSourceDirectoryNameOut,
szTargetDirectoryNameOut,
TRUE,
bOverWrite,
bSubDirectory
);
if (NOERROR != dwRetVal) {
DN_RETURN(dwRetVal);
}
// <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> CDirectory::CopyWork() <20>ȿ<EFBFBD><C8BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if (FALSE == ::RemoveDirectory(lpszSourceDirectoryName) &&
bSubDirectory
)
{
DN_RETURN(::GetLastError());
}
return(NOERROR);
}
//*---------------------------------------------------------------
// TYPE : FUNCTION
// NAME : CDirectory::Rename
//*---------------------------------------------------------------
// DESC : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD>
// PARM : 1 . lpszSourceDirectoryName - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
// 2 . lpszTargetDirectoryName - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
// RETV : NOERROR - <20><><EFBFBD><EFBFBD> / <20>׿<EFBFBD> - <20><><EFBFBD><EFBFBD>
// PRGM : B4nFter
//*---------------------------------------------------------------
DWORD CDirectory::Rename(LPCTSTR lpszSourceDirectoryName, LPCTSTR lpszTargetDirectoryName)
{
DN_ASSERT(NULL != lpszSourceDirectoryName, "Invalid!");
DN_ASSERT(NULL != lpszTargetDirectoryName, "Invalid!");
// CHECK_STRING(lpszSourceDirectoryName, DF_DIR_MAX_PATH);
// CHECK_STRING(lpszTargetDirectoryName, DF_DIR_MAX_PATH);
// <20>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD> üũ
if (!lpszSourceDirectoryName || !_tcscmp(lpszSourceDirectoryName, _T(""))) {
DN_RETURN(1);
}
// <20>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD> üũ
if (!lpszTargetDirectoryName || !_tcscmp(lpszTargetDirectoryName, _T(""))) {
DN_RETURN(1);
}
if (FALSE == ::MoveFile(lpszSourceDirectoryName, lpszTargetDirectoryName)) {
return(::GetLastError());
}
return(NOERROR);
}
//*---------------------------------------------------------------
// TYPE : FUNCTION
// NAME : CDirectory::Remove
//*---------------------------------------------------------------
// DESC : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD>
// PARM : 1 . lpszSourceDirectoryName - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
// 2 . bCheckFileExist - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><EFBFBD><E2BABB> TRUE)
// RETV : NOERROR - <20><><EFBFBD><EFBFBD> / <20>׿<EFBFBD> - <20><><EFBFBD><EFBFBD>
// PRGM : B4nFter
//*---------------------------------------------------------------
DWORD CDirectory::Remove(LPCTSTR lpszSourceDirectoryName, BOOL bCheckFileExist)
{
DN_ASSERT(NULL != lpszSourceDirectoryName, "Invalid!");
// CHECK_STRING(lpszSourceDirectoryName, DF_DIR_MAX_PATH);
// <20>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD> üũ
if (!lpszSourceDirectoryName || !_tcscmp(lpszSourceDirectoryName, _T(""))) {
DN_RETURN(1);
}
TCHAR szSourceDirectoryName[DF_DIR_MAX_PATH] = { _T('\0'), };
STRNCPY(szSourceDirectoryName, COUNT_OF(szSourceDirectoryName), lpszSourceDirectoryName);
INT iSourceDirectoryNameLen = (INT)_tcslen(szSourceDirectoryName);
DN_ASSERT(0 < iSourceDirectoryNameLen, "Invalid!");
DN_ASSERT(COUNT_OF(szSourceDirectoryName)-1 >= iSourceDirectoryNameLen, "Invalid!");
if (0 >= iSourceDirectoryNameLen) {
DN_RETURN(1);
}
if (_T('\\') != szSourceDirectoryName[iSourceDirectoryNameLen-1]) {
if (iSourceDirectoryNameLen < COUNT_OF(szSourceDirectoryName)-2) { // NULL <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
szSourceDirectoryName[iSourceDirectoryNameLen] = _T('\\');
szSourceDirectoryName[iSourceDirectoryNameLen+1] = _T('\0');
++iSourceDirectoryNameLen;
}
else {
DN_RETURN(1);
}
}
DWORD dwRetVal = RemoveWork(szSourceDirectoryName, bCheckFileExist);
if (NOERROR != dwRetVal) {
DN_RETURN(dwRetVal);
}
// <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> CDirectory::CopyWork() <20>ȿ<EFBFBD><C8BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if (FALSE == ::RemoveDirectory(lpszSourceDirectoryName)) {
DN_RETURN(::GetLastError());
}
return(NOERROR);
}
//*---------------------------------------------------------------
// TYPE : FUNCTION
// NAME : CDirectory::CheckFixDirectoryName
//*---------------------------------------------------------------
// DESC : Copy / Move <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֵ<EFBFBD><D6B5><EFBFBD> <20><><EFBFBD><EFBFBD> / <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD>
// PARM : 1 . lpszSourceDirectoryNameIn - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>丮 (<28>Է<EFBFBD>)
// 2 . lpszTargetDirectoryNameIn - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>丮 (<28>Է<EFBFBD>)
// 3 . lpszSourceDirectoryNameOut - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>丮 (<28><><EFBFBD><EFBFBD>)
// 4 . iSourceDirectoryNameOutSize - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>丮 ũ<><C5A9> (<28><><EFBFBD><EFBFBD>)
// 5 . lpszTargetDirectoryNameOut - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>丮 (<28><><EFBFBD><EFBFBD>)
// 6 . iTargetDirectoryNameOutSize - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>丮 ũ<><C5A9> (<28><><EFBFBD><EFBFBD>)
// RETV : NOERROR - <20><><EFBFBD><EFBFBD> / <20>׿<EFBFBD> - <20><><EFBFBD><EFBFBD>
// PRGM : B4nFter
//*---------------------------------------------------------------
DWORD CDirectory::CheckFixDirectoryName(
LPCTSTR lpszSourceDirectoryNameIn,
LPCTSTR lpszTargetDirectoryNameIn,
LPTSTR lpszSourceDirectoryNameOut,
const INT iSourceDirectoryNameOutSize,
LPTSTR lpszTargetDirectoryNameOut,
const INT iTargetDirectoryNameOutSize
)
{
DN_ASSERT(NULL != lpszSourceDirectoryNameIn, "Invalid!");
DN_ASSERT(NULL != lpszTargetDirectoryNameIn, "Invalid!");
DN_ASSERT(NULL != lpszSourceDirectoryNameOut, "Invalid!");
DN_ASSERT(0 < iSourceDirectoryNameOutSize, "Invalid!");
DN_ASSERT(NULL != lpszTargetDirectoryNameOut, "Invalid!");
DN_ASSERT(0 < iTargetDirectoryNameOutSize, "Invalid!");
// CHECK_STRING(lpszSourceDirectoryNameIn, DF_DIR_MAX_PATH);
// CHECK_STRING(lpszTargetDirectoryNameIn, DF_DIR_MAX_PATH);
// <20>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD> üũ
if (!lpszSourceDirectoryNameIn || !_tcscmp(lpszSourceDirectoryNameIn, _T(""))) {
DN_RETURN(1);
}
if (!lpszTargetDirectoryNameIn || !_tcscmp(lpszTargetDirectoryNameIn, _T(""))) {
DN_RETURN(1);
}
if (!lpszSourceDirectoryNameOut || !lpszTargetDirectoryNameOut) {
DN_RETURN(1);
}
INT iSourceDirectoryNameLen = (INT)_tcslen(lpszSourceDirectoryNameIn);
DN_ASSERT(0 < iSourceDirectoryNameLen, "Invalid!");
DN_ASSERT(iSourceDirectoryNameOutSize-1 >= iSourceDirectoryNameLen, "Invalid!");
if (0 >= iSourceDirectoryNameLen) {
DN_RETURN(1);
}
STRNCPY(lpszSourceDirectoryNameOut, iSourceDirectoryNameOutSize, lpszSourceDirectoryNameIn);
INT iTargetDirectoryNameLen = (INT)_tcslen(lpszTargetDirectoryNameIn);
DN_ASSERT(0 < iTargetDirectoryNameLen, "Invalid!");
DN_ASSERT(iTargetDirectoryNameOutSize-1 >= iTargetDirectoryNameLen, "Invalid!");
if (0 >= iTargetDirectoryNameLen) {
DN_RETURN(1);
}
STRNCPY(lpszTargetDirectoryNameOut, iTargetDirectoryNameOutSize, lpszTargetDirectoryNameIn);
if (_T('\\') != lpszSourceDirectoryNameOut[iSourceDirectoryNameLen-1]) {
if (iSourceDirectoryNameLen < iSourceDirectoryNameOutSize-2) { // NULL <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
lpszSourceDirectoryNameOut[iSourceDirectoryNameLen] = _T('\\');
lpszSourceDirectoryNameOut[iSourceDirectoryNameLen+1] = _T('\0');
++iSourceDirectoryNameLen;
}
else {
DN_RETURN(1);
}
}
if (_T('\\') != lpszTargetDirectoryNameOut[iTargetDirectoryNameLen-1]) {
if (iTargetDirectoryNameLen < iTargetDirectoryNameOutSize-2) { // NULL <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
lpszTargetDirectoryNameOut[iTargetDirectoryNameLen] = _T('\\');
lpszTargetDirectoryNameOut[iTargetDirectoryNameLen+1] = _T('\0');
++iTargetDirectoryNameLen;
}
else {
DN_RETURN(1);
}
}
CStringSet aSourceDirectoryName; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20≯<EFBFBD><CCB8><EFBFBD> <20>Ľ<EFBFBD><C4BD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD>
if (2 <= iSourceDirectoryNameLen) {
if (_T(':') == lpszSourceDirectoryNameOut[1]) {
// <20><><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> ǥ<>ð<EFBFBD> <20>ִٸ<D6B4> <20><>ŵ
aSourceDirectoryName = &lpszSourceDirectoryNameOut[2];
}
else {
aSourceDirectoryName = lpszSourceDirectoryNameOut;
}
}
else {
aSourceDirectoryName = lpszSourceDirectoryNameOut;
}
CStringSet aSourceDirectoryToken1, aSourceDirectoryToken2; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD>
BOOL bDoLoop = TRUE;
INT nStrLength = aSourceDirectoryName.GetLength();
INT nStrIndex = 0;
do {
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><20≯<EFBFBD><CCB8><EFBFBD><EFBFBD><EFBFBD> <20><>ū <20><><EFBFBD><EFBFBD>
aSourceDirectoryToken1 = aSourceDirectoryName.Tokenize(m_szSourceDirectorySeperator, nStrIndex);
if (!aSourceDirectoryToken1.IsEmpty()) {
aSourceDirectoryToken2 = aSourceDirectoryToken1;
}
if (nStrLength <= nStrIndex) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ľ<EFBFBD> <20><><EFBFBD><EFBFBD>
break;
}
}
while(bDoLoop);
// <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵٸ<D1B4> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><20≯<EFBFBD> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20>߰<EFBFBD>
if (!aSourceDirectoryToken2.IsEmpty()) {
INT iTargetDirectoryNameLen1 = (INT)_tcslen(lpszTargetDirectoryNameOut);
STRNCAT(lpszTargetDirectoryNameOut, iTargetDirectoryNameOutSize, aSourceDirectoryToken2.Get());
STRNCAT(lpszTargetDirectoryNameOut, iTargetDirectoryNameOutSize, _T("\\"));
INT iTargetDirectoryNameLen2 = (INT)_tcslen(lpszTargetDirectoryNameOut);
DN_ASSERT(iTargetDirectoryNameLen2 == iTargetDirectoryNameLen1 + aSourceDirectoryToken2.GetLength() + 1, "String Length Not Mach!");
if (iTargetDirectoryNameLen2 != iTargetDirectoryNameLen1 + aSourceDirectoryToken2.GetLength() + 1) {
DN_RETURN(1);
}
}
return(NOERROR);
}
//*---------------------------------------------------------------
// TYPE : FUNCTION
// NAME : CDirectory::CopyWork
//*---------------------------------------------------------------
// DESC : Copy / Move <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20>ڽ<EFBFBD><DABD><EFBFBD> <20><><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3>
// PARM : 1 . lpszSourceDirectoryName - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
// 2 . lpszTargetDirectoryName - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
// 3 . bDoErase - <20>۾<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (TRUE - Move / FALSE - Copy)
// 5 . bOverWrite - <20><><EFBFBD><EFBFBD><EEBEB2> <20><><EFBFBD><EFBFBD> (<28><EFBFBD><E2BABB> FALSE)
// 6 . bSubDirectory - <20>Ϻ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>丮 Ž<><C5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><EFBFBD><E2BABB> FALSE)
// RETV : NOERROR - <20><><EFBFBD><EFBFBD> / <20>׿<EFBFBD> - <20><><EFBFBD><EFBFBD>
// PRGM : B4nFter
//*---------------------------------------------------------------
DWORD CDirectory::CopyWork(
LPCTSTR lpszSourceDirectoryName,
LPCTSTR lpszTargetDirectoryName,
BOOL bDoErase,
BOOL bOverWrite,
BOOL bSubDirectory
)
{
DN_ASSERT(NULL != lpszSourceDirectoryName, "Invalid!");
DN_ASSERT(NULL != lpszTargetDirectoryName, "Invalid!");
// CHECK_STRING(lpszSourceDirectoryName, DF_DIR_MAX_PATH);
// CHECK_STRING(lpszTargetDirectoryName, DF_DIR_MAX_PATH);
// ȣ<><C8A3> <20><> <20>Űܺ<C5B0><DCBA><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ<C3BC><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
DWORD dwRetVal;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD>
if (FALSE == ::CreateDirectory(lpszTargetDirectoryName, NULL)) {
dwRetVal = ::GetLastError();
if (ERROR_ALREADY_EXISTS != dwRetVal) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
DN_RETURN(dwRetVal);
}
}
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD>/<2F>̵<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><20><> Ž<><C5BD>
TCHAR szSourceDirectoryFindFiles[DF_DIR_MAX_PATH] = { _T('\0'), };
STRCPY(szSourceDirectoryFindFiles, COUNT_OF(szSourceDirectoryFindFiles), lpszSourceDirectoryName);
STRNCAT(szSourceDirectoryFindFiles, COUNT_OF(szSourceDirectoryFindFiles), _T("*.*"));
CDirectory aDirectory;
dwRetVal = aDirectory.Begin(szSourceDirectoryFindFiles);
if (NOERROR != dwRetVal) {
DN_RETURN(dwRetVal);
}
while(NOERROR == dwRetVal) {
// <20><><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD> <20><><EFBFBD><EFBFBD>
if (aDirectory.IsDirectory()) {
// <20><><EFBFBD><EFBFBD><EFBFBD>
if (bSubDirectory &&
_T('.') != aDirectory.GetFindData().cFileName[0]
)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
TCHAR szSourceDirectoryName[DF_DIR_MAX_PATH] = { _T('\0'), };
TCHAR szTargetDirectoryName[DF_DIR_MAX_PATH] = { _T('\0'), };
INT iDirectoryNameLen1, iDirectoryNameLen2;
STRNCPY(szSourceDirectoryName, COUNT_OF(szSourceDirectoryName), lpszSourceDirectoryName);
STRNCPY(szTargetDirectoryName, COUNT_OF(szTargetDirectoryName), lpszTargetDirectoryName);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD>
iDirectoryNameLen1 = (INT)_tcslen(szSourceDirectoryName);
STRCAT(szSourceDirectoryName, COUNT_OF(szSourceDirectoryName), aDirectory.GetFindData().cFileName);
STRCAT(szSourceDirectoryName, COUNT_OF(szSourceDirectoryName), _T("\\"));
iDirectoryNameLen2 = (INT)_tcslen(szSourceDirectoryName);
DN_ASSERT(iDirectoryNameLen2 == iDirectoryNameLen1 + (INT)_tcslen(aDirectory.GetFindData().cFileName) + 1, "String Length Not Mach!");
if (iDirectoryNameLen2 != iDirectoryNameLen1 + (INT)_tcslen(aDirectory.GetFindData().cFileName) + 1) {
DN_RETURN(1);
}
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD>
iDirectoryNameLen1 = (INT)_tcslen(szTargetDirectoryName);
STRCAT(szTargetDirectoryName, COUNT_OF(szTargetDirectoryName), aDirectory.GetFindData().cFileName);
STRCAT(szTargetDirectoryName, COUNT_OF(szTargetDirectoryName), _T("\\"));
iDirectoryNameLen2 = (INT)_tcslen(szTargetDirectoryName);
DN_ASSERT(iDirectoryNameLen2 == iDirectoryNameLen1 + (INT)_tcslen(aDirectory.GetFindData().cFileName) + 1, "String Length Not Mach!");
if (iDirectoryNameLen2 != iDirectoryNameLen1 + (INT)_tcslen(aDirectory.GetFindData().cFileName) + 1) {
DN_RETURN(1);
}
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD>/<2F>̵<EFBFBD> <20>۾<EFBFBD> <20><><EFBFBD><EFBFBD>
dwRetVal = CopyWork(
szSourceDirectoryName,
szTargetDirectoryName,
bDoErase,
bOverWrite,
bSubDirectory
);
if (NOERROR != dwRetVal) {
DN_RETURN(dwRetVal);
}
// <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> CDirectory::CopyWork() <20>ȿ<EFBFBD><C8BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if (bDoErase &&
FALSE == ::RemoveDirectory(szSourceDirectoryName)
)
{
DN_RETURN(::GetLastError());
}
}
}
else {
// <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
TCHAR szSourceFileName[DF_DIR_MAX_PATH] = { _T('\0'), };
TCHAR szTargetFileName[DF_DIR_MAX_PATH] = { _T('\0'), };
INT iFileNameLen1, iFileNameLen2;
STRNCPY(szSourceFileName, COUNT_OF(szSourceFileName), lpszSourceDirectoryName);
STRNCPY(szTargetFileName, COUNT_OF(szTargetFileName), lpszTargetDirectoryName);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD>
iFileNameLen1 = (INT)_tcslen(szSourceFileName);
STRCAT(szSourceFileName, COUNT_OF(szSourceFileName), aDirectory.GetFindData().cFileName);
iFileNameLen2 = (INT)_tcslen(szSourceFileName);
DN_ASSERT(iFileNameLen2 == iFileNameLen1 + (INT)_tcslen(aDirectory.GetFindData().cFileName), "String Length Not Mach!");
if (iFileNameLen2 != iFileNameLen1 + (INT)_tcslen(aDirectory.GetFindData().cFileName)) {
DN_RETURN(1);
}
// <20><>ǥ <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD>
iFileNameLen1 = (INT)_tcslen(szTargetFileName);
STRCAT(szTargetFileName, COUNT_OF(szTargetFileName), aDirectory.GetFindData().cFileName);
iFileNameLen2 = (INT)_tcslen(szTargetFileName);
DN_ASSERT(iFileNameLen2 == iFileNameLen1 + (INT)_tcslen(aDirectory.GetFindData().cFileName), "String Length Not Mach!");
if (iFileNameLen2 != iFileNameLen1 + (INT)_tcslen(aDirectory.GetFindData().cFileName)) {
DN_RETURN(1);
}
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
DWORD dwCopyFlag = (bOverWrite)?(0):(COPY_FILE_FAIL_IF_EXISTS);
if (FALSE == ::CopyFileEx(szSourceFileName, szTargetFileName, NULL, NULL, FALSE, dwCopyFlag)) {
dwRetVal = ::GetLastError();
if (ERROR_FILE_EXISTS != dwRetVal &&
ERROR_ALREADY_EXISTS != dwRetVal
)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
DN_RETURN(dwRetVal);
}
}
// <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3>
if (bDoErase &&
FALSE == ::DeleteFile(szSourceFileName)
)
{
DN_RETURN(::GetLastError());
}
}
dwRetVal = aDirectory.Next();
if (NOERROR != dwRetVal && ERROR_NO_MORE_FILES != dwRetVal) {
// <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
aDirectory.End();
DN_RETURN(dwRetVal);
}
}
aDirectory.End();
return(NOERROR);
}
//*---------------------------------------------------------------
// TYPE : FUNCTION
// NAME : CDirectory::RemoveWork
//*---------------------------------------------------------------
// DESC : Remove <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20>ڽ<EFBFBD><DABD><EFBFBD> <20><><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3>
// PARM : 1 . lpszSourceDirectoryName - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
// 2 . bCheckFileExist - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><EFBFBD><E2BABB> TRUE)
// RETV : NOERROR - <20><><EFBFBD><EFBFBD> / <20>׿<EFBFBD> - <20><><EFBFBD><EFBFBD>
// PRGM : B4nFter
//*---------------------------------------------------------------
DWORD CDirectory::RemoveWork(LPCTSTR lpszSourceDirectoryName, BOOL bCheckFileExist)
{
DN_ASSERT(NULL != lpszSourceDirectoryName, "Invalid!");
// CHECK_STRING(lpszSourceDirectoryName, DF_DIR_MAX_PATH);
// ȣ<><C8A3> <20><> <20>Űܺ<C5B0><DCBA><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ<C3BC><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
DWORD dwRetVal;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD>/<2F>̵<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><20><> Ž<><C5BD>
TCHAR szSourceDirectoryFindFiles[DF_DIR_MAX_PATH] = { _T('\0'), };
STRCPY(szSourceDirectoryFindFiles, COUNT_OF(szSourceDirectoryFindFiles), lpszSourceDirectoryName);
STRNCAT(szSourceDirectoryFindFiles, COUNT_OF(szSourceDirectoryFindFiles), _T("*.*"));
CDirectory aDirectory;
dwRetVal = aDirectory.Begin(szSourceDirectoryFindFiles);
if (NOERROR != dwRetVal) {
DN_RETURN(dwRetVal);
}
while(NOERROR == dwRetVal) {
// <20><><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD> <20><><EFBFBD><EFBFBD>
if (aDirectory.IsDirectory()) {
// <20><><EFBFBD><EFBFBD><EFBFBD>
if (_T('.') != aDirectory.GetFindData().cFileName[0]) {
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
TCHAR szSourceDirectoryName[DF_DIR_MAX_PATH] = { _T('\0'), };
INT iDirectoryNameLen1, iDirectoryNameLen2;
STRNCPY(szSourceDirectoryName, COUNT_OF(szSourceDirectoryName), lpszSourceDirectoryName);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD>
iDirectoryNameLen1 = (INT)_tcslen(szSourceDirectoryName);
STRCAT(szSourceDirectoryName, COUNT_OF(szSourceDirectoryName), aDirectory.GetFindData().cFileName);
STRCAT(szSourceDirectoryName, COUNT_OF(szSourceDirectoryName), _T("\\"));
iDirectoryNameLen2 = (INT)_tcslen(szSourceDirectoryName);
DN_ASSERT(iDirectoryNameLen2 == iDirectoryNameLen1 + (INT)_tcslen(aDirectory.GetFindData().cFileName) + 1, "String Length Not Mach!");
if (iDirectoryNameLen2 != iDirectoryNameLen1 + (INT)_tcslen(aDirectory.GetFindData().cFileName) + 1) {
DN_RETURN(1);
}
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD>/<2F>̵<EFBFBD> <20>۾<EFBFBD> <20><><EFBFBD><EFBFBD>
dwRetVal = RemoveWork(szSourceDirectoryName, bCheckFileExist);
if (NOERROR != dwRetVal) {
DN_RETURN(dwRetVal);
}
// <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> CDirectory::CopyWork() <20>ȿ<EFBFBD><C8BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if (FALSE == ::RemoveDirectory(szSourceDirectoryName)) {
DN_RETURN(::GetLastError());
}
}
}
else {
// <20><><EFBFBD><EFBFBD>
if (bCheckFileExist) {
// <20><> <20>ɼ<EFBFBD><C9BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
DN_RETURN(1);
}
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
TCHAR szSourceFileName[DF_DIR_MAX_PATH] = { _T('\0'), };
INT iFileNameLen1, iFileNameLen2;
STRNCPY(szSourceFileName, COUNT_OF(szSourceFileName), lpszSourceDirectoryName);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD>
iFileNameLen1 = (INT)_tcslen(szSourceFileName);
STRCAT(szSourceFileName, COUNT_OF(szSourceFileName), aDirectory.GetFindData().cFileName);
iFileNameLen2 = (INT)_tcslen(szSourceFileName);
DN_ASSERT(iFileNameLen2 == iFileNameLen1 + (INT)_tcslen(aDirectory.GetFindData().cFileName), "String Length Not Mach!");
if (iFileNameLen2 != iFileNameLen1 + (INT)_tcslen(aDirectory.GetFindData().cFileName)) {
DN_RETURN(1);
}
// <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3>
if (FALSE == ::DeleteFile(szSourceFileName)) {
DN_RETURN(::GetLastError());
}
}
dwRetVal = aDirectory.Next();
if (NOERROR != dwRetVal && ERROR_NO_MORE_FILES != dwRetVal) {
// <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
aDirectory.End();
DN_RETURN(dwRetVal);
}
}
aDirectory.End();
return(NOERROR);
}