|  | 
 
| 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的文件系统。
 通过这种方式,你可以轻松地从全路径中提取出相对文件路径。
 
 
 | 
 |