8

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

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

现在我只想要abc.dll

4

5 回答 5

15

您可以使用PathFindFileName.

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

于 2012-07-17T11:26:31.897 回答
13

与上面已经说明的相同,但是当您使用 MFC 框架时,这将是执行此操作的方法。虽然这不会检查文件是否存在。

CString path= "c:\\Users\\Acer\\Desktop\\FolderName\\abc.dll";
CString fileName= path.Mid(path.ReverseFind('\\')+1);
于 2012-07-17T11:43:43.847 回答
7
std::string str = "c:\\Users\\Acer\\Desktop\\FolderName\\abc.dll";
std::string res = str.substr( str.find_last_of("\\") + 1 );

会给你“abs.dll”。

于 2012-07-17T11:31:31.450 回答
2

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

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

于 2012-07-17T11:32:48.053 回答
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;
}
于 2012-07-17T11:37:25.043 回答