예제 #1
0
파일: FileBase.cpp 프로젝트: winwingy/Study
__inline
void CFileBase::FileBackup(const SYSTEMTIME &Time)
{
	if (NULL == m_pFileHandle)
		return;

	if (m_sLastTime.wDay != Time.wDay)
	{
		CString strValue[2]; 
		if (!GetFileName(Time, 1, strValue[0], strValue[1]))
			return;

		CString strFileName = GetFileName();
		ATLASSERT(strFileName.GetLength() != 0);
		CString strMatchName = strValue[0] + strValue[1];
		if (!PathMatchSpec(strFileName, strMatchName))
		{
			m_iBkCount = -1;
			CloseFile();
		}
	}
	else if (m_iFileSize > m_iMaxFileSize)
	{
		CloseFile();
		AdjustFileName(Time);
	}
}
HRESULT CChildFrame::_RecursionExtractData(LPCTSTR lpszRoot, HTREEITEM hCurrItem, CTreeViewCtrlEx * pTreeView) 
{ 
    HRESULT hr = S_OK; 
    CTreeItem tiCurr(hCurrItem, pTreeView); 
    TREE_ITEM_DATA * pTmp = (TREE_ITEM_DATA *)tiCurr.GetData(); 
    if (NULL == pTmp) { 
        return hr; 
    } 

    TCHAR szPathCopy[MAX_PATH] = { 0 }; 
    lstrcpyn(szPathCopy, lpszRoot, _countof(szPathCopy)); 

    PathAddBackslash(szPathCopy); 

    TCHAR szCurrName[MAX_PATH/2] = { 0 }; 
    tiCurr.GetText(szCurrName, _countof(szCurrName)); 
    AdjustFileName(szCurrName); 
    
    if (STGTY_STORAGE == pTmp->dwStgType) 
    { 
        TCHAR *pIter = szCurrName; 
        while (*pIter && pIter<szCurrName+lstrlen(szCurrName)) 
        { 
            if(*pIter == '.') { *pIter = '_'; } 
            pIter ++; 
        } 

        TCHAR szNowPath[MAX_PATH] = { 0 }; 
        wnsprintf(szNowPath, _countof(szNowPath), _T("%s%s"), szPathCopy, szCurrName); 
        ::SHCreateDirectoryEx(*pTreeView, szNowPath, NULL); 
    } 
    else if (STGTY_STREAM == pTmp->dwStgType)
    { 
        TCHAR szFileName[MAX_PATH] = { 0 }; 
        wnsprintf(szFileName, _countof(szFileName), _T("%s%s"), szPathCopy, szCurrName); 

        CComPtr<IStream> spFile; 
        hr = pTmp->spStgOrStrm->QueryInterface(&spFile); 
        if (FAILED(hr)) return hr; 

        hr = WriteStreamToFile(szFileName, spFile); 
    } 

    lstrcat(szPathCopy, szCurrName); 

    HTREEITEM hChild = tiCurr.GetChild(); 

    while (NULL != hChild) 
    { 
        _RecursionExtractData(szPathCopy, hChild, pTreeView); 
        hChild = CTreeItem(hChild, pTreeView).GetNextSibling(); 
    } 

    return hr; 
} 
LRESULT CChildFrame::OnFileExtractData(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{ 
    HRESULT hr = E_FAIL; 

    TREE_ITEM_DATA * pTmp = (TREE_ITEM_DATA *)m_pData.GetData(); 

    if (NULL == pTmp) return 0; 

    TCHAR szText[MAX_PATH] = { 0 }; 
    m_pData.GetText(szText, _countof(szText)); 
    ATLTRACE(_T("---------%s\n"), szText); 

    if (STGTY_STREAM == pTmp->dwStgType) 
    { 
        TCHAR szFileName[MAX_PATH] = { 0 }; 

        if (NULL == _tcschr(szText, '.')) 
        { 
            _tcscat(szText, _T(".bin")); 
        } 

        AdjustFileName(szText); 

        TCHAR szFilter[MAX_PATH] = { 0 }; 
        { 
            // assembling filter string 
            TCHAR szAllFiles[MAX_PATH] = { 0 }; 
            AtlLoadString(IDS_ALL_FILES, szAllFiles, _countof(szAllFiles)); 

            wnsprintf(szFilter, _countof(szFilter), _T("%s(*.*)|*.*||"), szAllFiles); 
        } 

        CModifiedFileDialog fd ( FALSE, _T(""), szText, OFN_HIDEREADONLY, szFilter, m_hWnd ); 

        
        if ( IDOK != fd.DoModal(this->m_hWnd) ) 
            return 0; 
        
        lstrcpyn(szFileName, fd.m_szFileName, _countof(szFileName)); 

        if (PathFileExists(szFileName)) { 
            TCHAR szFmt[MAX_PATH] = { 0 }; 
            AtlLoadString(IDS_FILE_EXISTS, szFmt, _countof(szFmt)); 
            TCHAR szMsg[MAX_PATH*2] = { 0 }; 
            wnsprintf(szMsg, _countof(szMsg), szFmt, szFileName); 
            if ( IDYES != AtlMessageBox(m_hWnd, szMsg, IDS_WARNING, MB_YESNO|MB_ICONWARNING)) { 
                return 0; 
            } 
        } 

        CComPtr<IStream> spFile; 
        hr = pTmp->spStgOrStrm->QueryInterface(&spFile); 
        if (FAILED(hr)) return hr; 

        hr = WriteStreamToFile(szFileName, spFile); 
    } 

    else if (STGTY_STORAGE == pTmp->dwStgType) 
    { 
        CModifiedFolderDialog fd ( GetTopLevelParent(), IDS_SELECT_DIR, 
            BIF_RETURNONLYFSDIRS|BIF_NEWDIALOGSTYLE ); 

        TCHAR szCurrPath[MAX_PATH] = { 0 }; 
        GetCurrentDirectory(_countof(szCurrPath), szCurrPath); 

        fd.SetInitialDir( szCurrPath ); 

        if ( IDOK != fd.DoModal() ) 
            return 0; 

        lstrcpyn(szCurrPath, fd.GetFolderPath(), _countof(szCurrPath)); 
        PathAddBackslash(szCurrPath); 

        SHCreateDirectoryEx(*this, szCurrPath, NULL); 

        // recursion 
        _RecursionExtractData(szCurrPath, m_pData, &m_wndCatalog); 
    } 

    return 0; 
} 
예제 #4
0
파일: FileBase.cpp 프로젝트: winwingy/Study
CFileBase::~CFileBase(void)
{
	CloseFile();
	m_iBkCount = -1;
	AdjustFileName(m_sLastTime, FALSE);
}