有没有更有效的方法来提取文件的文件名?

Chr*_*sto 0 c++ filenames file path visual-studio-2022

下面的代码使用文件的路径提取文件的文件名。

#include <iostream>
#include <vector>

using namespace std;

int main() {
    cout << "Program operating..." << endl;

    string s = "C:\\Users\\user\\Pictures\\Strategic_Offense_Logo_1";
    string name;
    for (unsigned int i = s.size() - 1; i > 0; i--) {
        if (s[i] == '\\') {
            for (unsigned int j = i + 1; j < s.size(); j++) {
                if (s[j] == '.' || j == s.size() - 1) {
                    if (j == s.size() - 1)
                        j++;
                    vector<char> v(j - i - 1);
                    unsigned int l = 0;
                    for (unsigned int k = i + 1; k < j; k++) {
                        v[l++] = s[k];
                    }
                    char* vectorAsArray = &v[0];
                    name = vectorAsArray;
                    name.resize(v.size());
                    break;
                }
            }
            break;
        }
    }
    cout << name << endl;
}
Run Code Online (Sandbox Code Playgroud)
#include <iostream>
#include <vector>

using namespace std;

int main() {
    cout << "Program operating..." << endl;

    string s = "C:\\Users\\user\\Pictures\\Strategic_Offense_Logo_1.png";
    string name;
    for (unsigned int i = s.size() - 1; i > 0; i--) {
        if (s[i] == '\\') {
            for (unsigned int j = i + 1; j < s.size(); j++) {
                if (s[j] == '.' || j == s.size() - 1) {
                    if (j == s.size() - 1)
                        j++;
                    vector<char> v(j - i - 1);
                    unsigned int l = 0;
                    for (unsigned int k = i + 1; k < j; k++) {
                        v[l++] = s[k];
                    }
                    char* vectorAsArray = &v[0];
                    name = vectorAsArray;
                    name.resize(v.size());
                    break;
                }
            }
            break;
        }
    }
    cout << name << endl;
}
Run Code Online (Sandbox Code Playgroud)

有没有更有效的方法来做到这一点?

目的:我正在创建一个纹理类,我想通过其名称而不是其路径或组成的 ID 来引用纹理。

注意:库根本不适用于 Visual Studio 编译器。如果您知道如何修复它或有替代解决方案,请发布。 在此输入图像描述

Cas*_*sey 6

使用std::filesystem::path::filename

也就是说,您应该通过其完全限定路径或唯一 ID 来引用纹理;否则,不同文件夹中具有相同名称的纹理将会发生冲突。