Dateierweiterung in C erhalten

Lesezeit: 2 Minuten

Benutzeravatar von errorhandler
Fehlerbehandlung

Wie bekommt man eine Dateiendung (wie .tiff) aus einem Dateinamen in C?

Vielen Dank!

  • Mögliches Duplikat von Dateierweiterung in C-Sprache abrufen

    – nibot

    4. März 2017 um 18:15 Uhr

Benutzeravatar von ThiefMaster
DiebMeister

const char *get_filename_ext(const char *filename) {
    const char *dot = strrchr(filename, '.');
    if(!dot || dot == filename) return "";
    return dot + 1;
}

printf("%s\n", get_filename_ext("test.tiff"));
printf("%s\n", get_filename_ext("test.blah.tiff"));
printf("%s\n", get_filename_ext("test."));
printf("%s\n", get_filename_ext("test"));
printf("%s\n", get_filename_ext("..."));

  • Nach dot = strrchr(filename, '.');, dot != NULL impliziert, dass *dot == '.' Ihr Test sollte also einfach sein if(dot).

    – Chris Lutz

    15. März 2011 um 9:07 Uhr


  • Ich erhalte eine Fehlermeldung: renamer.c:11: warning: incompatible implicit declaration of built-in function ‘strrchr’

    – Fehlerbehandlung

    15. März 2011 um 9:08 Uhr

  • Wenn der letzte Punkt das erste Zeichen des Basisnamens ist, sollte er aus praktischen Gründen nicht als Dateierweiterung behandelt werden. Zum Beispiel im ~/.forward“.forward” ist keine Erweiterung.

    – Steve Jessop

    15. März 2011 um 10:00 Uhr

  • Das spielt keine Rolle … weil ich es nur verwende, um meine Fotos stapelweise umzubenennen.

    – Fehlerbehandlung

    16. März 2011 um 4:30 Uhr

  • Nachdem Sie die Dateierweiterung extrahiert haben, könnte ein nützlicher Zusatz die Dateierweiterung sein strcmp() Alltag ab string.h. Damit können Sie die Dateierweiterung mit einer bestimmten Zeichenfolge vergleichen und eine bestimmte Aktion ausführen, z if (strcmp(ext,"tiff") == 0) ...

    – mabalenk

    11. September 2019 um 8:18 Uhr

Benutzeravatar von pmg
pmg

Finden Sie den letzten Punkt mit strrchrdann 1 Zeichen weiter

#include <stdio.h> /* printf */
#include <string.h> /* strrchr */

ext = strrchr(filename, '.');
if (!ext) {
    /* no extension */
} else {
    printf("extension is %s\n", ext + 1);
}

  • Es muss nicht kopiert werden – Sie geben einen Teil der Zeichenfolge zurück, der mit dem Ende der ursprünglichen Zeichenfolge endet, sodass keine Änderungen erforderlich sind.

    – Meister der Diebe

    15. März 2011 um 9:11 Uhr

Benutzeravatar von templatetypedef
Vorlagentypdef

Du kannst den … benutzen strrchr Funktion, die nach dem letzten Vorkommen eines Zeichens in einer Zeichenfolge sucht, um den letzten Punkt zu finden. Von dort aus können Sie den Rest der Zeichenfolge als Erweiterung ablesen.

Hier ist eine Version, die auch für Dateien (oder Verzeichnisse) funktioniert. Pfade:

#include <assert.h>
#include <string.h>

const char *FileSuffix(const char path[])
{
    const char *result;
    int i, n;

    assert(path != NULL);
    n = strlen(path);
    i = n - 1;
    while ((i >= 0) && (path[i] != '.') && (path[i] != "https://stackoverflow.com/") & (path[i] != '\\')) {
        i--;
    }
    if ((i > 0) && (path[i] == '.') && (path[i - 1] != "https://stackoverflow.com/") && (path[i - 1] != '\\')) {
        result = path + i;
    } else {
        result = path + n;
    }
    return result;
}


int main(void)
{
    assert(strcmp(FileSuffix("foo/bar.baz.qux"), ".qux") == 0);
    assert(strcmp(FileSuffix("foo.bar.baz/qux"), "") == 0);
    return 0;
}

1396320cookie-checkDateierweiterung in C erhalten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy