Wie bekommt man eine Dateiendung (wie .tiff
) aus einem Dateinamen in C?
Vielen Dank!
Fehlerbehandlung
Wie bekommt man eine Dateiendung (wie .tiff
) aus einem Dateinamen in C?
Vielen Dank!
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
pmg
Finden Sie den letzten Punkt mit strrchr
dann 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
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;
}
Mögliches Duplikat von Dateierweiterung in C-Sprache abrufen
– nibot
4. März 2017 um 18:15 Uhr