CPathSplit
基于 CString 的路径分割器。
引言
我需要一个与 CString
兼容的路径分割器,所以这是我非常方便的版本 ;) 它完全符合网络路径规范,并且兼容 Windows CE……
分割路径
两种分割路径的方式
在构造函数中
创建分割器对象时
CString l_oStrPath;
l_oStrPath = "C:\\Windows\\test.txt";
CPathSplit l_oPathSplit(l_oStrPath);
创建后
将另一个路径分解
CString l_oStrPath;
CPathSplit l_oPathSplit;
l_oStrPath = "C:\\Windows\\test.txt";
l_oPathSplit.Split(l_oStrPath);
CPathSplit::Split()
返回 true
表示路径有效且已成功分割,否则返回 false
!
获取路径元素
路径结构
typedef enum ePathElement { ePATHEL_DRIVE = 0 , ePATHEL_DIRECTORY , ePATHEL_FILENAME , ePATHEL_EXTENSION , ePATHEL__END };
现在提供了一个 enum
列表,以便选择路径元素。
l_oStrFullPath
= "C:\Windows\test.txt"对于网络驱动器:
l_oStrFullPath
= "\\Server_remote\Charles\test.txt"对于 Pocket PC 驱动器:
l_oStrFullPath
= "\Storage Card\test.txt"下表显示了哪个枚举元素对应哪个路径元素
枚举元素 | 磁盘驱动器 | 网络驱动器 | Pocket PC 驱动器 |
ePATHEL_DRIVE |
"C:" | "" (空) | "" (空) |
ePATHEL_DIRECTORY |
"\Windows\" | "\Server_remote\Charles\" | "\Storage Card\" |
ePATHEL_FILENAME |
"test" | "test" | "test" |
ePATHEL_EXTENSION |
".txt" | ".txt" | ".txt" |
获取路径元素
下表显示了哪个函数返回哪个路径元素
函数 | 枚举元素 |
GetDrive() | ePATHEL_DRIVE |
GetDirectory() | ePATHEL_DIRECTORY |
GetFileName() | ePATHEL_FILENAME |
GetExtension() | ePATHEL_EXTENSION |
路径被分割后,您可以检索每个元素。
例如,路径 "C:\Windows\test.txt" 已被分割
返回驱动器
l_oStrDrive = l_oPathSplit.GetDrive();
l_oStrDrive
= "C:"
返回目录
l_oStrDirectory = l_oPathSplit.GetDirectory();
l_oStrDirectory
= "\Windows\"
返回不带扩展名的文件名
l_oStrFileName = l_oPathSplit.GetFileName();
l_oStrFileName
= "test"
返回文件扩展名(包含点)
l_oStrFileExtension = l_oPathSplit.GetExtension();
l_oStrFileExtension
= ".txt"
获取路径的组合
您现在也可以检索完整限定路径的完整部分。
返回完整路径
l_oStrFullPath = l_oPathSplit.GetPath();
l_oStrFullPath
= "C:\Windows\test.txt"
返回路径的开头,包括末尾的路径元素
l_oStrPathFile = l_oPathSplit.GetPath(ePATHEL_FILENAME);
l_oStrPathFile
= "C:\Windows\test"
返回路径的开头并添加一个队列字符串
l_oStrFileExt = ".html";
l_oStrPathCustom = l_oPathSplit.GetPath(ePATHEL_FILENAME, &l_oStrFileExt);
l_oStrPathCustom
= "C:\Windows\test.html"
返回路径的一部分,从一个元素到另一个元素
l_oStrPathPart = l_oPathSplit.GetPath(ePATHEL_FILENAME, NULL, ePATHEL_DIRECTORY);
l_oStrPathPart
= "\Windows\test"
结论
对于网络驱动器或 Pocket PC 驱动器,没有驱动器盘符
l_oStrPath = "\\\\Windows\\test.txt"; // or "\\Windows\\test.txt" l_oPathSplit.Split(l_oStrPath); l_oStrDrive = l_oPathSplit.GetDrive();
l_oStrDrive
= ""
扩展名始终包含点!
历史
- 2004/03/13 - 1.03:修改核心以提高可用性和部分检索能力
- 2003/08/22 - 1.02:为嵌入式路径分割器添加了空默认构造函数
- 2003/08/21 - 1.01:根据 Eddie Velasquez 和 Marga.FP 的意愿进行的修改
- 2003/08/21 - 1.00:
CPathSplit
的首次发布
注意
如果它看起来有点奇怪,我很抱歉,我知道有很多很多路径分割器。但由于它使用了 CString
,这个在 Windows CE 上也运行得相当好 ;) 它无意取代其他具有正则表达式等的分割器!它**仅仅**是一个小巧且微不足道的路径分割器供您享用,所以不要留下差评,因为它不过是几十行 MFC 代码而已;)
关于一些人可能觉得奇怪的缩进:我知道它看起来真的很丑,但我尝试了 Concurrent Clean 语言,它缩进的方式让我非常满意。它几乎将所有内容(甚至测试语句)都结构化为每行一个指令。因此,代码的清晰度非常好,让我想起了汇编,在汇编中你不能在一行中放多个指令。调试时也更容易,通过转到正确的行,你可以自动找到有问题的指令。你不必抓耳挠腮地寻找导致崩溃的指令 ;) 而且当你是一个像我这样的**编译定义**狂热者(曾经的嵌入式编码员)时,它也非常……干净。还可以轻松注释每一行和/或每个参数!