74 votes

Un moyen facile de supprimer l'extension d'un nom de fichier ?

J'essaie de récupérer le nom de fichier brut sans l'extension du nom de fichier passé en arguments :

 int main ( int argc, char *argv[] )
{
    // Check to make sure there is a single argument
    if ( argc != 2 )
    {
        cout<<"usage: "<< argv[0] <<" <filename>\n";
        return 1;
    }

    // Remove the extension if it was supplied from argv[1] -- pseudocode
    char* filename = removeExtension(argv[1]);

    cout << filename;

}

Le nom du fichier doit par exemple être "test" lorsque je suis passé dans "test.dat".

106voto

Adithya Surampudi Points 2529
size_t lastindex = fullname.find_last_of("."); 
string rawname = fullname.substr(0, lastindex); 

Attention au cas où il n'y a pas de "." et il retourne npos

33voto

nightcracker Points 34498

Cela marche:

 std::string remove_extension(const std::string& filename) {
    size_t lastdot = filename.find_last_of(".");
    if (lastdot == std::string::npos) return filename;
    return filename.substr(0, lastdot); 
}

22voto

Grzegorz Bazior Points 73

À mon avis, c'est la solution la plus simple et la plus lisible :

 #include <boost/filesystem/convenience.hpp>

std::string removeFileExtension(const std::string& fileName)
{
    return boost::filesystem::change_extension(fileName, "").string();
}

Prograide.com

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.

Powered by:

X