__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; }
CFileBase::~CFileBase(void) { CloseFile(); m_iBkCount = -1; AdjustFileName(m_sLastTime, FALSE); }