### 分解文件路径和名称

在开发应用程序时，经常需要对文件名称进行处理。例如，从一个完整路径的文件名称获取文件名、扩展名和包含扩展名的文件名等，如图 1 所示。

图 1 截取文件名示意图

在 Visual C++中没有像 Delphi 中提供的系统函数来实现这些功能。为了方便程序开发，笔者设计了一个 CPath 类，用于对文件名称进行处理。实例设计步骤如下：

（1）创建一个控制台应用程序。

（2）定义一个 CPath 类，向该类中添加 3 个静态方法，分别用于获取文件名、扩展名和包含扩展名的文件名。

class CPath

{

public:

//从包含完整路径的文件名称中去除路径，包含文件扩展名

static bool GetFileName(char szSrcFile[], int nSrcLen, char szDesFile[], int nDesLen);

//获取文件的扩展名

static bool GetExtName(char szSrcFile[], int nSrcLen, char szDesFile[], int nDesLen);

//获取文件名，去除路径和扩展名

static bool GetFileShortName(char szSrcFile[], int nSrcLen, char szDesFile[], int nDesLen);

};

提示：有关 CPath 类的实现用户可以在“应用”模式中的“源码管理”的类库中找到。

（3）在 main 函数中调用 CPath 类的 GetExtName 方法 获取扩展名、调用 GetFileShortName 方法获取文件名，调用 GetFileName 方法获取包含扩展名的文件名。

int main(int argc, char* argv[])

{

cout << "完整名称为：" << *argv << endl;

char szDesFile[128] = {0};

bool bRet = CPath::GetExtName(*argv, strlen(*argv), szDesFile, 128); //获取扩展名

if (bRet)

{

cout << "扩展名为：" << szDesFile << endl; //输出扩展名

}

char szShortName[128] = {0};

bRet = CPath::GetFileShortName(*argv, strlen(*argv), szShortName, 128); //获取短文件名

if (bRet)

{

cout << "短文件名：" << szShortName << endl; //输出信息

}

char szFileName[128] = {0};

bRet = CPath::GetFileName(*argv, strlen(*argv), szFileName, 128); //获取文件名

if (bRet)

{

cout << "文件名：" << szFileName << endl; //输出信息

}

return 0;

}

演示效果如图 2 所示。

图 2 演示效果