⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 progressdlg.cpp

📁 手机数据备份软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	{
		bFound = FileFind.FindNextFile ();
		BOOL NextFlag = FALSE;
		path = FileFind.GetFilePath();
		if (FileFind.MatchesMask(FILE_ATTRIBUTE_INROM || FILE_ATTRIBUTE_ROMMODULE
			||FILE_ATTRIBUTE_SYSTEM))
			continue;
if (FileFind.GetFilePath().Find(L"\\Backup") != -1)
	continue;
		
		if (FileFind.IsDirectory()) 
		{
			//do nothing with the Inbox dir
			for (i = 0; i < 2; i++)
			{
				if (path.Compare(Inbox[i]) == 0)
				{
					NextFlag = TRUE;
					break;
				}
			}
			if (NextFlag)
				continue;
			
			path += L"\\";
			GetBackupFileSize(path);
			continue;
		}			
		
		fnlen = FileFind.GetLength();
		path = FileFind.GetFilePath();
		i = j = k = 0;
		while ((k = path.Find(L"\\",k+1)) != -1)
		{
			i = k;
			j++;
			if (j == 2)
				break;
		}
		path.MakeLower();
		path = path.Left(i);
		
		if ((j == 2)&&(path.Compare(AVANTGO) == 0))
		{
			m_BackupFileSize[0] += fnlen;
			continue;
		}
		ext = FileFind.GetFileName();
		i = 0;
		j = 0;
		while ((j = ext.Find(L".",j+1)) != -1)
			i = j;
		if (i)
			ext = ext.Right(ext.GetLength() - i -1);
		ext.MakeLower();
		exta.LoadString(NOTES_EXT);
		if (exta.Find(ext.GetBuffer(0)) != -1) 
			m_BackupFileSize[1]+=fnlen;
		else 
		{
			exta.LoadString(VOICE_EXT);
			if (exta.Find(ext.GetBuffer(0)) != -1)
				m_BackupFileSize[2]+=fnlen;
			else
			{		
				m_BackupFileSize[3]+=fnlen;
			}
		}
	} 
	FileFind.Close();
// sysp:voice:notes:channel:reg:

/*	m_BackupFileSize[0]=avgoSize;
	m_BackupFileSize[1]=noteSize;;
	m_BackupFileSize[2]=voiceSize;
	m_BackupFileSize[3]=sysprogSize;
*/
}

void CProgressDlg::GetDirSize(LPCTSTR FileName, DWORD &DirSize)
{
	CCeFileFind FindFile;
	if (!FindFile.FindFile(FileName))
		return;
	CString str(FileName);	
	if( str.Right(1) != "\\")
		str += L"\\";
	str += L"*.*";
	BOOL bFound = FindFile.FindFile(str);
	while (bFound)
	{
		bFound = FindFile.FindNextFile();
		if (FindFile.IsDirectory())
			GetDirSize(FindFile.GetFilePath(),DirSize);
		else
			DirSize += FindFile.GetLength();
	}
	FindFile.Close();
}

void CProgressDlg::CountKB(DWORD size, CString &str) const
{
	DWORD K = 1024;
	DWORD M = (1024*1024);
	TCHAR buf[10];
	memset(buf,0,sizeof(buf));
	float kbsize = 0;
	if (size >= M)
	{
		kbsize = (float)size / M;
		swprintf(buf,L"%.2f M",kbsize);
		str = buf;
	}
	else
		if (size >= K)
		{
			kbsize = (float)size / K;
			swprintf(buf,L"%.2f K",kbsize);
			str = buf;
		}
		else
			str.Format(L"%d B",size);

}

BOOL CProgressDlg::CountStorageSpace(DWORD ItemTotalSize)
{
	CString FlashStr;
	FlashStr.LoadString(FLASHROM_TXT);
	if (m_StorageType.Compare(FlashStr) == 0)
	{
		if (ItemTotalSize > (5*1024*1024))
			return FALSE;
	}
	else
	{
		DWORD DBVOLSIZE = 128000;
		ULARGE_INTEGER freeSize;
		ULARGE_INTEGER totalSize;
		GetDiskFreeSpaceEx(m_StorageType,&freeSize,&totalSize,NULL);
		if (m_BackupDBFlag)
			ItemTotalSize += DBVOLSIZE;
		if(ItemTotalSize > freeSize.QuadPart)
		{
			CString Msg,War;
			Msg.LoadString(MSG_SPACEWARNNING);
			War.LoadString(WARNING_TXT);
			MessageBox(Msg,War,MB_OK|MB_ICONEXCLAMATION|MB_ICONERROR);
			UpdateWindow();
			return FALSE;
		}
	}
	return TRUE;
}

BOOL CProgressDlg::GetSelected()
{
	int i = 0,j = 0;
	POSITION pos = 0;
	CString StrItem,SizeStr;
	BOOL MailFlag = FALSE;
	
	// restore part of datas
	m_TotalSize = 0;
	BSTR ListItemStr;
	CString InboxStr;
	InboxStr.LoadString(INBOX_TXT);
	for(i = 0; i < m_ListCtrl.GetItemCount();i++)
	{
		// get selected datas
		if (!m_ListCtrl.GetCheckState(i))
			continue;
		MailFlag = FALSE;
		ListItemStr = NULL;
		m_ListCtrl.GetItemText(i,0,ListItemStr);
		StrItem = ListItemStr;
		if (StrItem.Find(InboxStr) != -1)
			MailFlag = TRUE;
	
		for (j = 0; j < m_ItemList.GetCount(); j++)
		{
			pos = m_ItemList.FindIndex(j);
			if (MailFlag && m_ItemList.GetAt(pos).IsMail)
			{
				m_TotalSize+= m_ItemList.GetAt(pos).ItemSize;
				m_SelectedList.AddTail(m_ItemList.GetAt(pos));
				continue;
			}
			if (!MailFlag)
			{
				// get the selected item in m_Itemlist
				if (wcslen(m_ItemList.GetAt(pos).ItemName) == 0)
					continue;

				if (StrItem.Find(m_ItemList.GetAt(pos).ItemName) != -1)
				{
					m_TotalSize+= m_ItemList.GetAt(pos).ItemSize;
					m_SelectedList.AddTail(m_ItemList.GetAt(pos));
					break;
				}	
			}
		}	
	}
	CountKB(m_TotalSize,SizeStr);
	CStatic ShowTotal;
	ShowTotal.Attach(GetDlgItem(IDC_SHOWTOTALSIZE));
	ShowTotal.SetWindowText(SizeStr);

	UpdateWindow();
	return TRUE;

}

BOOL CProgressDlg::RestoreDBinit(int &line, DWORD &MailDBSize)
{
	int i,j,MailDBNum = 0;
	CString SizeStr,DBStr;
	BackupItem item;	
	POSITION pos;
	BOOL FindFlag = FALSE;
	CRegistry_DB RestoreDB(m_StorageType);
	DWORD tagID[3] = {CONTACT_TXT,CALENDAR_TXT,TASK_TXT};
	CString tag[3];//	= {CONTACT,CALENDAR,TASK};
	CString temp;
	for( i = 0 ; i < 3 ; i++)
	{
		temp.LoadString(tagID[i]);
		tag[i] = temp;		
	}

	LPWSTR  DB_NAME[] = {CONTACTDB,CALENDARDB,TASKDB};
	PCEGUID pceguid=0;
	pceguid = (PCEGUID) LocalAlloc (LPTR, sizeof (CEGUID));
	// if any database exists, read it
	if (MountDBVol(pceguid,OPEN_EXISTING))
	{
		if (RestoreDB.GetTotalRestoreDB(pceguid))
		{		
			for(i = 0; i < RestoreDB.m_DBItemList.GetCount();i++)
			{
				pos = RestoreDB.m_DBItemList.FindIndex(i);
				ZeroMemory(&item,sizeof(item));
				item.IsDB = TRUE;
				item.ItemSize = RestoreDB.m_DBItemList.GetAt(pos).ItemSize;
				wcscpy(item.DBNAME_ZIPDIR,RestoreDB.m_DBItemList.GetAt(pos).ItemName);
				DBStr.Format(item.DBNAME_ZIPDIR);
				if ((DBStr.Find(L"pmail") != -1) || (DBStr.Find(L"fldr") != -1))
				{
					item.IsMail = TRUE;
					MailDBSize += item.ItemSize;
					m_ItemList.AddTail(item);
					FindFlag = TRUE;
					m_BackupMailFlag = TRUE;
					continue;
				}
				m_TotalSize+= item.ItemSize;	
				for (j = 0 ;j < 3 ;j++)
					if (wcscmp(item.DBNAME_ZIPDIR,DB_NAME[j]) == 0)
					{
						wcscpy(item.ItemName,tag[j]);
						DBStr.Format(L"%d ",line +1);
						m_ListCtrl.InsertItem(line,DBStr + tag[j]);
						m_ListCtrl.SetCheckState(line,TRUE);
						CountKB(item.ItemSize,SizeStr);	
						m_ListCtrl.SetItemText(line++,1,SizeStr);
						break;
					}	
				m_ItemList.AddTail(item);
				FindFlag = TRUE;
			}
		}
		else
		{
			SetCursor(LoadCursor(NULL, IDC_ARROW));
			CString Msg;
			Msg.LoadString(MSG_DATABASE_NOTFINISHED);
			SetCursor(LoadCursor(NULL, IDC_ARROW));
			if (MessageBox(Msg,RESTORETITLE,MB_YESNO|MB_ICONWARNING) == IDNO)
			{
				CeUnmountDBVol(pceguid);
				LocalFree((HLOCAL)pceguid); 
				return -1;
			}

			SetCursor(LoadCursor(NULL, IDC_WAIT));
			UpdateWindow();
		}
		CeUnmountDBVol(pceguid);
	}
	LocalFree((HLOCAL)pceguid); 

	return FindFlag;
}

BOOL CProgressDlg::RestoreFileInit(int &line, DWORD MailDBSize)
{
	int i = 0,nEofFlag = 0;
	CString SizeStr;
	BackupItem item;	
	BOOL FindFlag = FALSE;
	
	CFile restoreFile;
	CString RestorePath;
	WORD  wOK;
	DWORD dwFileLen;
	CString filename;
	CFileException FileError;
	LPCTSTR ZipFileName[] = {INBOXDIR,CHANNELDIR,NOTEDIR,VOICEDIR,USERAPPDIR,REGDIR};
	DWORD tagID[] = {INBOX_TXT,CHANNELS_TXT,NOTES_TXT,VOICERECORDER_TXT,USERAPP_TXT};
	CString tag[5];

	CString temp;
	for(i = 0 ;i < 5; i++)
	{
		temp.LoadString(tagID[i]);
		tag[i] = temp;
	}

	for (i = 0; i < 6;i++)
	{
		if (restoreFile.Open(m_StorageType + ZipFileName[i],CFile::modeRead,&FileError))
		{
			ZeroMemory(&item,sizeof(item));
			wcscpy(item.DBNAME_ZIPDIR,ZipFileName[i]);	

			// init registry
			if (i == 5)
				nEofFlag = sizeof(WORD);
			else
				nEofFlag = sizeof(DWORD)+sizeof(WORD);

			if(nEofFlag > (int)restoreFile.GetLength())
			{
				SetCursor(LoadCursor(NULL, IDC_ARROW));
				filename.Format(MSG_FILENOOK,m_StorageType + ZipFileName[i]);
				if (MessageBox(filename,RESTORETITLE,MB_YESNO|MB_ICONWARNING) == IDNO)
				{
					restoreFile.Close();
					return -1;
				}
				SetCursor(LoadCursor(NULL, IDC_WAIT));
				UpdateWindow();
				restoreFile.Close();
				continue;
			}				
			restoreFile.Seek(-nEofFlag,CFile::end);	
			if (i == 5)
				restoreFile.Read(&wOK,sizeof(WORD));
			else
			{
				restoreFile.Read(&dwFileLen,sizeof(DWORD));			
				restoreFile.Read(&wOK,sizeof(WORD));
			}
			if(wOK != 0x4B4F)
			{
				SetCursor(LoadCursor(NULL, IDC_ARROW));
				filename.Format(MSG_FILENOOK,m_StorageType + ZipFileName[i]);
				if (MessageBox(filename,RESTORETITLE,MB_YESNO|MB_ICONWARNING) == IDNO)
				{
					restoreFile.Close();
					return -1;						
				}
				SetCursor(LoadCursor(NULL, IDC_WAIT));
				UpdateWindow();
				restoreFile.Close();
				continue;
			}
			FindFlag = TRUE;
			if (i == 5)
			{
				item.IsReg = TRUE;
				item.ItemSize = restoreFile.GetLength();
				m_TotalSize +=item.ItemSize;
			}
			else
			{				
				item.ItemSize = dwFileLen;
				if (i == 0)
				{
					if (!m_BackupMailFlag)
					{
						UpdateWindow();
						restoreFile.Close();
						continue;
					}
					dwFileLen += MailDBSize;
					item.IsMail = TRUE;
				}
				wcscpy(item.ItemName,tag[i]);
				filename.Format(L"%d ",line +1);
				m_ListCtrl.InsertItem(line,filename + tag[i]);
				m_ListCtrl.SetCheckState(line,TRUE);
				CountKB(dwFileLen,SizeStr);	
				m_ListCtrl.SetItemText(line++,1,SizeStr);				
				m_TotalSize += dwFileLen;
			}
			m_ItemList.AddTail(item);
			restoreFile.Close();
		}
		else
		{	
//			if (FileError.m_lOsError != ERROR_FILE_NOT_FOUND)
			CFindFile FindFile;
			if (FindFile.FindFile(m_StorageType + ZipFileName[i]))
			{
				FileError.ReportError();
				return -1;
			}
		}
	}	
	return	FindFlag;
}

BOOL CProgressDlg::MountDBVol(PCEGUID &pceguid, DWORD mode)
{
	CString BackupDBdir;
	BackupDBdir = m_StorageType + DBDIR; 
	if (!CeMountDBVol(pceguid,BackupDBdir.LockBuffer(),mode))
	{
		BackupDBdir.UnlockBuffer();
		return FALSE;
	}
	BackupDBdir.UnlockBuffer();
	return TRUE;
}

BOOL CProgressDlg::BackupAll()
{
	int i = 0,j = 0;
	POSITION pos = 0;
	CRegistry_DB BackupRegDB(m_StorageType);
	BOOL MountFlag = FALSE;
	BOOL firstFlag = TRUE;
	m_CurrentStep = 0;
	m_CurrentSize = 0;
	PCEGUID pceguid=0;
	pceguid = (PCEGUID) LocalAlloc (LPTR, sizeof (CEGUID));	
	int listnum = m_ItemList.GetCount();
	for (i = 0 ; i < listnum ; i++)
	{
		pos = m_ItemList.FindIndex(i);
		//backup Inbox
		if (m_ItemList.GetAt(pos).IsMail)
		{	
			if (!MountFlag)
			{
				// mount database volume
				if (!MountDBVol(pceguid,CREATE_ALWAYS))
				{
					SetCursor(LoadCursor(NULL, IDC_ARROW));
					CString Msg;
					Msg.LoadString(MSG_BACKUPDATABASEERROR);
					MessageBox(Msg,BACKUPTITLE,MB_OK|MB_ICONERROR);
					LocalFree((HLOCAL)pceguid); 
					return FALSE;
				}
				MountFlag = TRUE;
			}			
			if (!BackupInbox(pceguid))
			{
				CeUnmountDBVol(pceguid);
				LocalFree((HLOCAL)pceguid); 
				return FALSE;
			}
			continue;
		}
		//backup databases
		if (m_ItemList.GetAt(pos).IsDB)
		{
			if (!MountFlag)
			{
				// mount database volume
				if (!MountDBVol(pceguid,CREATE_ALWAYS))
				{
					SetCursor(LoadCursor(NULL, IDC_ARROW));
					CString Msg;
					Msg.LoadString(MSG_BACKUPDATABASEERROR);
					MessageBox(Msg,BACKUPTITLE,MB_OK|MB_ICONERROR);
					LocalFree((HLOCAL)pceguid); 
					return FALSE;
				}
				MountFlag = TRUE;
			}
/*			if (firstFlag && (!m_BackupMailFlag) )
			{
				CTestDlg testDlg;
				testDlg.DoModal();
				UpdateWindow();				
				firstFlag = FALSE;
			}					
*/
			if (!BackupRegDB.BackupDB(m_ItemList.GetAt(pos).DBNAME_ZIPDIR,pceguid))
			{
				SetCursor(LoadCursor(NULL,IDC_ARROW));
				CString Msg;
				Msg.LoadString(MSG_BACKUPDATABASEERROR);
				MessageBox(Msg,BACKUPTITLE,MB_OK|MB_ICONERROR);
				CeUnmountDBVol(pceguid);
				LocalFree((HLOCAL)pceguid); 
				return FALSE;
			}
			SetProgressPos(BackupRegDB.GetBackupDBSize(m_ItemList.GetAt(pos).DBNAME_ZIPDIR));
		}
		else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -