|
VC++ MFC的Unicode环境中,如果你需要将一个文件的全路径过滤掉目录路径,只保留相对文件路径
在VC++ MFC的Unicode环境中,如果你需要将一个文件的全路径过滤掉目录路径,只保留相对文件路径,可以使用以下方法。这里我们将使用 `CString` 来处理字符串,并利用MFC提供的一些函数来实现这个功能。
### 示例代码
以下是一个示例代码,展示如何从全路径中去掉目录路径,仅保留文件名部分:
- #include <afx.h> // 包含CString的定义
- #include <afxwin.h> // MFC基本头文件
- CString GetRelativeFilePath(const CString& fullPath, const CString& directoryPath) {
- // 确保目录路径以反斜杠结尾
- CString dirPath = directoryPath;
- if (!dirPath.IsEmpty() && dirPath.Right(1) != _T("\"))
- dirPath += _T("\");
- // 检查全路径是否以目录路径开头
- if (fullPath.Left(dirPath.GetLength()).CompareNoCase(dirPath) == 0) {
- // 返回相对路径(去掉目录路径)
- return fullPath.Mid(dirPath.GetLength());
- }
- // 如果全路径不以目录路径开头,返回全路径
- return fullPath;
- }
- // 示例使用
- int main() {
- CString directoryPath = _T("C:\\Users\\User\\Documents");
- CString fullPath = _T("C:\\Users\\User\\Documents\\MyFile.txt");
- CString relativePath = GetRelativeFilePath(fullPath, directoryPath);
- // 输出相对路径
- AfxMessageBox(relativePath); // 显示相对路径
- return 0;
- }
复制代码
### 说明
1. **确保目录路径格式**:在函数 `GetRelativeFilePath` 中,我们首先确保提供的目录路径以反斜杠( `\`)结尾,以便后续比较。
2. **比较路径**:使用` CompareNoCase `函数比较全路径的开头部分与目录路径,忽略大小写。如果匹配,则说明全路径是以目录路径开头。
3. **获取相对路径**:如果匹配成功,使用` Mid `函数从全路径中去掉目录路径部分,返回剩余的文件路径。
4. **示例使用**:在` main `函数中,我们定义了一个目录路径和一个全路径,然后调用` GetRelativeFilePath `函数获取相对路径,并通过` AfxMessageBox `显示。
### 注意事项
- 确保在使用时,输入的路径是有效的,并且路径分隔符使用的是反斜杠(` \`)。
- 该方法适用于Windows系统,因为路径格式是基于Windows的文件系统。
通过这种方式,你可以轻松地从全路径中提取出相对文件路径。
|
|