Quelle est la façon la plus simple d'obtenir le nom du fichier à partir d'un chemin ?
string filename = "C:\\MyDirectory\\MyFile.bat"
Dans cet exemple, je devrais obtenir "MonFichier". sans extension.
Quelle est la façon la plus simple d'obtenir le nom du fichier à partir d'un chemin ?
string filename = "C:\\MyDirectory\\MyFile.bat"
Dans cet exemple, je devrais obtenir "MonFichier". sans extension.
El boost
filesystem
est également disponible en tant que experimental/filesystem
et a été intégrée à ISO C++ pour C++17. Vous pouvez l'utiliser comme suit :
#include <iostream>
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
int main () {
std::cout << fs::path("/foo/bar.txt").filename() << '\n'
}
Sortie :
"bar.txt"
Il fonctionne également pour std::string
objets.
C'est la seule chose qui a finalement fonctionné pour moi :
#include "Shlwapi.h"
CString some_string = "c:\\path\\hello.txt";
LPCSTR file_path = some_string.GetString();
LPCSTR filepart_c = PathFindFileName(file_path);
LPSTR filepart = LPSTR(filepart_c);
PathRemoveExtension(filepart);
à peu près ce que Skrymsli a suggéré mais ne fonctionne pas avec wchar_t*, VS Enterprise 2015
_splitpath fonctionnait aussi bien, mais je n'aime pas avoir à deviner le nombre de caractères char[ ?] dont j'aurai besoin ; certaines personnes ont probablement besoin de ce contrôle, je suppose.
CString c_model_name = "c:\\path\\hello.txt";
char drive[200];
char dir[200];
char name[200];
char ext[200];
_splitpath(c_model_name, drive, dir, name, ext);
Je ne crois pas qu'aucune inclusion ait été nécessaire pour _splitpath. Aucune bibliothèque externe (comme boost) n'était nécessaire pour l'une ou l'autre de ces solutions.
Je le ferais en...
Recherchez en arrière à partir de la fin de la chaîne de caractères jusqu'à ce que vous trouviez la première barre oblique inverse/avant.
Ensuite, recherchez à nouveau en arrière à partir de la fin de la chaîne jusqu'à ce que vous trouviez le premier point (.).
Vous avez alors le début et la fin du nom du fichier.
C'est simple...
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
Rechercher à partir de l'arrière jusqu'à ce que vous frappiez un retour arrière ?
2 votes
@KerrekSB, vous voulez dire barre oblique inversée ;)
0 votes
J'ai un std::string qui contient le chemin d'un fichier "c : \\MyDirectory\\Myfile.pdf "Je dois renommer ce fichier en monfichier_md.pdf et je dois donc obtenir le nom du fichier à partir du chemin.
1 votes
Si vous devez faire beaucoup de travail avec les chemins de fichiers, pensez à utiliser Boost FileSystem. boost.org/doc/libs/release/libs/filesystem/v3/doc/index.htm
2 votes
@Nim : Oui ! J'ai dû perdre le fil...