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

📄 myfolder.cpp

📁 磁盘容量扫描、但界面和程序结构非常不错
💻 CPP
字号:
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DiskInfo.h"
#include "MyFolder.h"
#include "Common/Useful.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMyFolder::CMyFolder()
{
	m_strFolderName = _T("");
	m_nFileCount = 0;
	m_dFileSize = 0;
	m_bSorted = FALSE;

	m_nStatus = -1;

	m_arraySubFolder.SetSize(0, 10);
}

CMyFolder::~CMyFolder()
{
	DeleteAll();
}

BOOL CMyFolder::Add(CMyFolder * pObj)
{
	try 
	{
		m_arraySubFolder.Add(pObj);
		return TRUE;
	}
	catch (CMemoryException* e)
	{
		CString strTemp, strMes;
		strTemp.LoadString(IDS_ERR_OUTOFMEM);
		strMes.Format(strTemp, 2012);
		AfxMessageBox(strMes);

		if (pObj !=NULL) 
			delete pObj;
		e->Delete();
		return FALSE;
	}
}

void CMyFolder::DeleteAll()
{
	int nCount = m_arraySubFolder.GetSize();
	
	for (int i = 0; i < nCount; i++)
	{
		CMyFolder* pObj = (CMyFolder*)(m_arraySubFolder.GetAt(i));
		
		pObj->DeleteAll();
		
		delete pObj;
	}

	m_arraySubFolder.RemoveAll();
	
	//m_ptarraySubFolder.RemoveAll();
	m_bSorted = FALSE;
	/*
	while (m_listSubFolder.GetHeadPosition()) {
		delete m_listSubFolder.RemoveHead();
	}*/
	m_nFileCount = 0;
	m_dFileSize = 0;

	m_nStatus = -1;
}

int CMyFolder::GetCount()
{
	return m_arraySubFolder.GetSize();
}

CMyFolder* CMyFolder::GetAt(int i)
{
	return (CMyFolder*)m_arraySubFolder.GetAt(i); // No check 
	/*
	POSITION pos = m_listSubFolder.FindIndex(i);
	if (pos)
		return m_listSubFolder.GetAt(pos); // No check 
	else
		return NULL;*/
}

long double CMyFolder::GetFolderSize(BOOL bSubFolder)
{
	if (!IsReady())
		return 0;

	if (IsFile())
		return m_dFileSize;

	CMyFolder* pFolder;
	long double ldSize = m_dFileSize;
	if (bSubFolder)
	{
		int nCount = m_arraySubFolder.GetSize();
		for (int i = 0; i < nCount; i++)
		{
			pFolder = (CMyFolder*)m_arraySubFolder.GetAt(i);
			if (!pFolder->IsFile())
				ldSize += pFolder->GetFolderSize(bSubFolder);
		}

/*		POSITION pos = m_listSubFolder.GetHeadPosition();
		while( pos != NULL )
		{
			pFolder = m_listSubFolder.GetNext( pos ); 
			if (!pFolder->IsFile())
				ldSize += pFolder->GetFolderSize(bSubFolder);
		}*/

	}
	return ldSize;
}

unsigned long int CMyFolder::GetFolderCount(BOOL bSubFolder, BOOL bRealCount)
{
	if (!IsReady())
		return 0;

	int nCount = m_arraySubFolder.GetSize();
	unsigned long int nC = nCount;

	if (bRealCount && m_nFileCount!=0 && !(IsFile())) // Exclude the file folder
		nC --;

	if (bSubFolder)
	{
		for (int i = 0; i < nCount; i++)
		{
			nC += ((CMyFolder*)(m_arraySubFolder.GetAt(i)))->
				GetFolderCount(bSubFolder);
		}
/*
		CMyFolder* pFolder;

		POSITION pos = m_listSubFolder.GetHeadPosition();
		while( pos != NULL )
		{
			pFolder = m_listSubFolder.GetNext( pos ); 
			nC += pFolder->GetFolderCount(bSubFolder);
		}*/
	}

	return nC;
}

unsigned long int CMyFolder::GetFileCount(BOOL bSubFolder)
{
	if (!IsReady())
		return 0;

	CMyFolder* pFolder;
	unsigned long int nC = m_nFileCount;
	if (bSubFolder)
	{
		int nCount = m_arraySubFolder.GetSize();
		for (int i = 0; i < nCount; i++)
		{
			pFolder = (CMyFolder*)m_arraySubFolder.GetAt(i);
			if (!pFolder->IsFile())
				nC += pFolder->GetFileCount(bSubFolder);
		}

		/*POSITION pos = m_listSubFolder.GetHeadPosition();
		while( pos != NULL )
		{
			pFolder = m_listSubFolder.GetNext( pos ); 
			if (!pFolder->IsFile())
				nC += pFolder->GetFileCount(bSubFolder);
		}*/
	}

	return nC;
}

/*BOOL CMyFolder::GetSubColor(CMyFolder *pSubFolder, COLORREF& color)
{	
	/*
	if (!m_bSorted)
	{
		if (m_arraySubFolder.GetSize() > 1)
			qsort((void*)(m_arraySubFolder.GetData()), 
				((size_t)m_arraySubFolder.GetSize()), 
				sizeof(m_arraySubFolder.GetAt(0)),
				CDetailDlg::CompareFolderSize);
		m_bSorted = TRUE;
	}

	int nCount = m_arraySubFolder.GetSize();
	for (int i = 0; i < nCount; i++)
	{
		CMyFolder* pFolder = (CMyFolder*)m_arraySubFolder.GetAt(i);
		if (pFolder->m_strFolderName == pSubFolder->m_strFolderName &&
			pFolder->m_dFileSize == pSubFolder->m_dFileSize)
		{
			if (m_pChart)
			{
				m_pChart->GetItemColor(i, color);
				return TRUE;
			}
		}
	}
	return FALSE;
}*/

CString CMyFolder::GetItemText(int nSubItem)
{
	if (nSubItem == 0)
		return m_strFolderName;

	CString str;
	if (nSubItem == 1) // Size
	{
		FormatByteSize(GetFolderSize(TRUE),str);
		return str;
	}

	if (nSubItem == 2) // Folder
	{
		str.Format("%d", GetFolderCount(TRUE));
		return str;
	}
	
	if (nSubItem == 3) // File
	{
		str.Format("%d", GetFileCount(TRUE));
		return str;
	}

	return CString();
}

BOOL CMyFolder::IsFile()
{
	return m_nStatus == 1;
}

BOOL CMyFolder::IsReady()
{
	return m_nStatus != -1;
}

void CMyFolder::SetTitle(CString str)
{
	int nLenght = str.GetLength();
	
	if (nLenght > 0)
	{
		m_strFolderName = str.Left(1);
		m_strFolderName.MakeUpper();
		str = str.Right(nLenght-1);
		str.MakeLower();
		m_strFolderName += str;
	}else
		m_strFolderName = "";
}

void CMyFolder::SetReady(int n)
{
	/*m_ptarraySubFolder.SetSize(m_listSubFolder.GetCount());

	POSITION pos = m_listSubFolder.GetHeadPosition();
	int nPos=0;
	while( pos != NULL )
	{
		m_ptarraySubFolder.SetAt(nPos, m_listSubFolder.GetNext( pos ));
		nPos ++;
		
	}

	//VERIFY(m_ptarraySubFolder.GetSize() == m_listSubFolder.GetCount());
*/
	m_nStatus = n;
	m_arraySubFolder.FreeExtra();
}

⌨️ 快捷键说明

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