Sagen wir, es gibt eine Datei namens 12345.jpg. Wie kann ich in C die Dateierweiterung erhalten, so dass ich mit einer Dateierweiterung vergleichen kann? Wenn es eingebaute Funktionen gibt, bitte lass es mich wissen.Dateierweiterung in C Sprache erhalten
Antwort
Wahrscheinlich:
#include <string.h>
char *extn = strrchr(filename, '.');
, dass Sie einen Zeiger auf den Zeitraum der Verlängerung geben, oder einen Nullzeiger, wenn es keine Erweiterung. Sie müssen unter Umständen mehr Sorgfalt walten lassen, um sicherzustellen, dass es unter anderem keinen Schrägstrich nach dem Punkt gibt.
'strrchr (Dateiname + 1, '.');' würde Namen wie '.svn' behandeln, die mit einem Punkt beginnen, aber keine Erweiterung haben. – drawnonward
@drainonward - zweifellos, wenn Sie dies als einen Dateinamen ohne Erweiterung, anstatt als eine Erweiterung ohne Namen betrachten. Dies ist ein weiterer Fall der "Sorgfaltspflicht", der zu berücksichtigen ist. Wenn das OP jedoch versucht, die gefundene Erweiterung mit einer ziemlich kurzen Liste bekannter Erweiterungen zu vergleichen, bedeutet die Tatsache, dass ".svn" nicht in der Liste enthalten ist, dass es wahrscheinlich sowieso keine Rolle spielt. –
@drawnonward: Ich falsch gelesen, was Sie sagten - Sie machen einen gültigen Punkt. Dies würde jedoch bei absoluten Pfadnamen, die mit einem '/' beginnen, oder relativen Namen, die einen Schrägstrich ('subdir/.svn') enthalten, nicht helfen. Es gibt einen Fall, in dem Sie sagen müssen, dass Sie den Anfang des Basisnamens der Datei suchen müssen (nach dem letzten Schrägstrich, aber Sie müssen sich Gedanken über nachfolgende Schrägstriche und root machen) und dann nach einem Punkt suchen, der nicht an erster Stelle steht. Ich nehme an, das bedeutet, dass das Elternverzeichnis '..' den Namen 'Punkt' hat, gefolgt von einer Erweiterung, die mit einem Punkt beginnt, und nichts mehr ... Es gibt normalerweise einen weiteren Kurvenball. –
Verwenden strchr Erstes Array Mitglied werden Sie zweites Array Mitglied Dateinamen werden Ihnen Erweiterung geben
Können Sie das näher erläutern? –
Vergessen Sie nicht einen Dateinamen wie 'this.uses.many.periods.jpg' –
Eine Funktion, das zu tun, zusammen mit einem Test-Harnisch:
#include <stdio.h>
#include <string.h>
const char *getExt (const char *fspec) {
char *e = strrchr (fspec, '.');
if (e == NULL)
e = ""; // fast method, could also use &(fspec[strlen(fspec)]).
return e;
}
int main (int argc, char *argv[]) {
int i;
for (i = 1; i < argc; i++) {
printf ("[%s] - > [%s]\n", argv[i], getExt (argv[i]));
}
return 0;
}
Laufen dies mit:
./program abc abc. abc.1 .xyz abc.def abc.def.ghi
gibt Ihnen:
[abc] - > []
[abc.] - > [.]
[abc.1] - > [.1]
[.xyz] - > [.xyz]
[abc.def] - > [.def]
[abc.def.ghi] - > [.ghi]
+1 für' strrchr'. Die beste Methode, um die letzte Instanz eines Zeichens in einer Zeichenfolge zu finden. – tomlogic
Nur für den Fall, dass jemand es vermisst. 'getExt()' nimmt an, dass 'fspec' ein Basisname und nicht der vollständige Pfad ist. Betrachten Sie beispielsweise 'my.dir/file'. Verwenden Sie 'basename()', um den Basisnamen von einem vollständigen Pfad abzurufen. –
Es gibt eine tragbare CRT-Lösung: _splitpath.
In Windows gibt es auch eine undokumentierte Shell32-API namens PathGetExtension, aber das ist in so vielen Dingen böse, dass ich das wahrscheinlich nicht bemerkt hätte.
Dies ist offensichtlich eine neue Definition des Wortes "portable", die ich vorher nicht ahnte :-) Mit Entschuldigung zu Douglas Adams von HHGTTG Ruhm. – paxdiablo
In der Tat, nie das Wort "portable" und eine Verbindung zu msdn im selben Satz gesehen :-) – Job
Mein schlechtes, mein schlechtes! Wird die Antwort nicht bearbeiten, für andere zu genießen :) –
- 1. Regex die Dateierweiterung erhalten
- 2. Benutzerdefinierte Dateierweiterung in C++
- 3. Wie Dateierweiterung von OpenFileDialog erhalten?
- 4. Wie Dateierweiterung von Dateiname in PostgreSQL erhalten?
- 5. Ausführungszeit in C-Sprache
- 6. Sprache ändern in C#
- 7. C++ - Filename und Dateierweiterung teilen
- 8. Ändern der StreamReader-Dateierweiterung in C#
- 9. C# Dateierweiterung in font-awesome Klasse
- 10. C#: Buchstaben des Alphabets für skandinavische Sprache erhalten?
- 11. C-Sprache, HTML-Quelle
- 12. Wie kann ich Fehlermeldung für Fehlernummer (C-Sprache) erhalten?
- 13. Dateierweiterung in Google Drive v3 und .net erhalten
- 14. C als objektorientierte Sprache
- 15. Windows-Sprache C++
- 16. C# Dynamisch typisierte Sprache
- 17. C# Sprache erweitern?
- 18. Dateierweiterung Python
- 19. entfernen Dateierweiterung in Java
- 20. prüft Dateierweiterung
- 21. Dateierweiterung ändern
- 22. Wie Dateierweiterung der Datei als Ergebnis der SQL-Abfrage erhalten?
- 23. Erhalten lokalisierter Zeichenfolgen für eine bestimmte Sprache
- 24. Was ist Dateierweiterung?
- 25. Vala (C# -ähnliche Sprache) kompiliert zu C?
- 26. Call C++ (C) aus D-Sprache
- 27. UTF-8 -> ASCII in C Sprache
- 28. Linkliste hinzufügen Elemente in Rekursion Sprache C
- 29. Wie Matrixmultiplikation in der Sprache C
- 30. brauchen eine Teilung Ausdruck in c Sprache
[SO 290488] (http://stackoverflow.com/questions/290488) deckt eine Menge des gleichen Bodens ab. –
So ist das - http://stackoverflow.com/questions/51949/how-to-get-file-extension-from-string-in-c –
Mögliches Duplikat von [Dateierweiterung in C] (http: // stackoverflow.com/questions/5309471/getting-file-extension-in-c) – nibot