假设有一个 CString 变量存储文件的完整路径。现在我只能从 if 中找到文件名。如何在 vc++ 中执行此操作。
CString FileName = "c:\Users\Acer\Desktop\FolderName\abc.dll";
现在我只想要abc.dll。
假设有一个 CString 变量存储文件的完整路径。现在我只能从 if 中找到文件名。如何在 vc++ 中执行此操作。
CString FileName = "c:\Users\Acer\Desktop\FolderName\abc.dll";
现在我只想要abc.dll。
您可以使用PathFindFileName
.
请记住,您必须转义\
路径字符串中的字符!
与上面已经说明的相同,但是当您使用 MFC 框架时,这将是执行此操作的方法。虽然这不会检查文件是否存在。
CString path= "c:\\Users\\Acer\\Desktop\\FolderName\\abc.dll";
CString fileName= path.Mid(path.ReverseFind('\\')+1);
std::string str = "c:\\Users\\Acer\\Desktop\\FolderName\\abc.dll";
std::string res = str.substr( str.find_last_of("\\") + 1 );
会给你“abs.dll”。
我会使用Boost::FileSystem进行文件名操作,因为它了解名称的各个部分。你想要的函数是 filename()
如果您只是获取文件名,则可以使用 CString 函数执行此操作。首先使用 ReverseFind 找到 ast 反斜杠,然后 Right 得到想要的字符串。
下面的代码演示了从完整路径中提取文件名
#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;
}