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

📄 split.cpp

📁 Windows Mobile,ppc,wince下的chm格式文件阅读器源代码
💻 CPP
字号:
//-------------------------------------------------------------------------------------------------
//
//	IBSL Technologies (c) 2000
//	BrainTree Development Ltd(c) 2000
//
//	Rennie Bowe
//	P J Tewkesbury
//
//-------------------------------------------------------------------------------------------------
//

#include "stdafx.h"		// included by all compilands

CSplitPath::CSplitPath(CString FilePath, TCHAR Delimiter)
{
	ResetData(Delimiter);
	SplitPath(FilePath);	
};

void CSplitPath::ResetData(TCHAR Delimiter)
{
	m_LocalPC.Empty();
	m_Machine.Empty();
	m_ErrorMsg.Empty();
	m_Drive.Empty();
	m_Directory.Empty();
	m_Filename.Empty();
	m_Extension.Empty();
	m_FilePath.Empty();			
	m_bError=false;
	m_Delimiter=Delimiter;
	m_strDblDelimiter.Format(_T("%c%c"),m_Delimiter,m_Delimiter);
	m_strDelimiter.Format(_T("%c"),m_Delimiter);
};

BOOL CSplitPath::HasErrors()
{
	return m_bError;
}

CString CSplitPath::GetErrorString()
{
	return CString(m_ErrorMsg);
}

void CSplitPath::SplitPath(CString FilePath)
{
	if (FilePath.IsEmpty()) return;
	m_FilePath=FilePath;
	m_FilePath.MakeUpper();

	// Split Path into component parts.

	CStringEx Remainder;
	m_Machine.Empty();
	m_Drive.Empty();
	m_Directory.Empty();
	m_Filename.Empty();
	m_Extension.Empty();

	if (m_FilePath[1]==':')
	{
		m_Drive=m_FilePath.GetField(m_Delimiter,0);
		Remainder=m_FilePath.Mid(3);
	}
	else Remainder=m_FilePath;

	Remainder.TrimLeft(' ');
	Remainder.TrimRight(' ');
	if (Remainder.IsEmpty())
	{
		m_Filename=_T("*");
		m_Extension=_T(".*");
	}
	else
	{
		if ((FilePath.Find('.')==-1) && (FilePath.Find(m_Delimiter)==-1))
		{
			m_Machine.Empty();
			m_Drive.Empty();
			m_Directory.Empty();
			m_Filename=FilePath;
			m_Extension.Empty();
			return;
		}

		CString Last=Remainder.GetField(m_Delimiter,Remainder.GetFieldCount(m_Delimiter)-1);
		if ((Last.Find('*',0)!=-1) || (Last.Find('?',0)!=-1))
		{
			int idx=Last.Find('.',0);
			if (idx==-1) m_Filename=Last;
			else 
			{
				m_Filename=Last.Left(idx);
				m_Extension=Last.Mid(idx);
			}

			if (Remainder.GetAt(0)!=m_Delimiter) m_Directory=m_strDelimiter;
			for(int i=0;i<Remainder.GetFieldCount(m_Delimiter)-1;i++)
			{
				m_Directory+=Remainder.GetField(m_Delimiter,i);
				m_Directory+=m_strDelimiter;
			}				
		}
		else
		{
			DWORD Attr=GetFileAttributes(m_FilePath);
			if (Attr==-1)
			{
				if (Last.Find('.',0)==-1)
					Attr=FILE_ATTRIBUTE_DIRECTORY;
				else
					Attr=0;					
			}

			if ((Attr &  FILE_ATTRIBUTE_DIRECTORY)==FILE_ATTRIBUTE_DIRECTORY)
			{
				m_Filename="*";
				m_Extension=".*";
				m_Directory=Remainder;
			}
			else
			{					
				for(int i=0;i<Remainder.GetFieldCount(m_Delimiter)-1;i++)
				{
					m_Directory+=m_strDelimiter;	
					m_Directory+=Remainder.GetField(m_Delimiter,i);
				}
				m_Directory+=m_strDelimiter;	

				int idx=Last.Find('.',0);
				if (idx==-1) m_Filename=Last;
				else 
				{
					m_Filename=Last.Left(idx);
					m_Extension=Last.Mid(idx);
				}
			}
		}
	}
	if (m_Directory.Right(2)==m_strDblDelimiter)
	{
		m_Directory=m_Directory.Left(m_Directory.GetLength()-1);
	}
	if (m_Directory.Left(2)==m_strDblDelimiter)
	{
		m_Directory=m_Directory.Mid(1,m_Directory.GetLength()-1);
	}
};

CString CSplitPath::MakePath()
{				
	CString FilePath;		
	FilePath=GetPath()+m_strDelimiter;
	FilePath+=m_Filename+m_Extension;		
	return CString(FilePath);
};

CString CSplitPath::GetPath()
{
	CString Path;
	if (m_Machine.IsEmpty())
	{
		Path.Format(_T("%s%s"),m_Drive,m_Directory);
	}
	else
	{	
		if (m_Machine.CompareNoCase(m_LocalPC)==0)
		{
			Path.Format(_T("%c:%c%s"),m_Drive.GetAt(0),m_Delimiter,m_Directory);
		}
		else
		{
			Path.Format(_T("%s%s%c%c$%s"),m_strDblDelimiter,m_Machine,m_Delimiter,m_Drive.GetAt(0),m_Directory);
		}
	}
	return CString(Path);
};

CString CSplitPath::GetName()									// Returns Filename & Extension part of URL
{
	CString Name;
	Name.Format(_T("%s%s"),m_Filename,m_Extension);
	return CString(Name);
};

⌨️ 快捷键说明

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