在vc ++中仅查找文件完整路径中的文件名

时间:2012-07-17 11:22:23

标签: c++ file visual-c++

假设有一个CString变量存储文件的完整路径。现在我只能从if中找到文件名。如何在vc ++中完成。

CString FileName = "c:\Users\Acer\Desktop\FolderName\abc.dll";

现在我只想要 abc.dll

5 个答案:

答案 0 :(得分:13)

您可以使用PathFindFileName

请记住,您必须转义路径字符串中的\字符!

答案 1 :(得分:10)

与上面已经说过的相同,但是当你使用MFC框架时,这将是这样做的方法。虽然这不会检查文件的存在。

CString path= "c:\\Users\\Acer\\Desktop\\FolderName\\abc.dll";
CString fileName= path.Mid(path.ReverseFind('\\')+1);

答案 2 :(得分:7)

std::string str = "c:\\Users\\Acer\\Desktop\\FolderName\\abc.dll";
std::string res = str.substr( str.find_last_of("\\") + 1 );

会得到你的“abs.dll”。

答案 3 :(得分:2)

我会使用Boost::FileSystem进行文件名操作,因为它了解名称的各个部分。你想要的功能是filename()

如果您只是获取文件名,可以使用CString函数执行此操作。首先使用ReverseFind找到ast反斜杠,然后使用Right来获取所需的字符串。

答案 4 :(得分:0)

以下代码演示了从完整路径中提取文件名

#include <iostream>
#include <cstdlib>
#include <string>
#include <algorithm>

std::string get_file_name_from_full_path(const std::string& file_path)
{
    std::string file_name;

    std::string::const_reverse_iterator it = std::find(file_path.rbegin(), file_path.rend(), '\\');
    if (it != file_path.rend())
    {
        file_name.assign(file_path.rbegin(), it);
        std::reverse(file_name.begin(), file_name.end());
        return file_name;
    }
    else
        return file_name;
}

int main()
{
    std::string file_path = "c:\\Users\\Acer\\Desktop\\FolderName\\abc.dll";
    std::cout << get_file_name_from_full_path(file_path) << std::endl;
    return EXIT_SUCCESS;
}