📄 split.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 + -