Dire che c'è un file chiamato 12345.jpg. In C, come posso ottenere l'estensione del file in modo da poter confrontare con qualche estensione di file? Se ci sono alcune funzioni incorporate, per favore fatemelo sapere.Estensione del file in linguaggio C
risposta
Probabilmente:
#include <string.h>
char *extn = strrchr(filename, '.');
che vi darà un puntatore al periodo della proroga, o un puntatore nullo se non v'è alcuna estensione. Potrebbe essere necessario fare un po 'di due diligence per garantire che non ci sia una barra dopo il punto, tra le altre cose.
'strrchr (nomefile + 1, '.');' gestirà nomi come '.svn' che iniziano con un punto ma non hanno estensione. – drawnonward
@drawnonward - indubbiamente, se si considera che è un nome di file senza estensione, piuttosto che un'estensione senza nome. Questo è un altro dei casi di "dovuta diligenza" da considerare. Tuttavia, se l'OP sta cercando di confrontare l'estensione trovata con una lista abbastanza breve di estensioni conosciute, allora il fatto che '.svn' non sia nella lista significa che probabilmente non avrà importanza. –
@drawnonward: ho interpretato erroneamente ciò che stavi dicendo: tu fai un punto valido. Tuttavia, questo non sarebbe d'aiuto con nomi di percorso assoluti che iniziano con un '/', o nomi relativi contenenti una barra ('sottodir/.svn'). C'è un motivo per dire che devi trovare l'inizio del nome base del file (dopo l'ultima barra, ma devi preoccuparti delle barre e radici finali) e quindi cercare un punto non nella prima posizione. Immagino che ciò significhi che la directory genitore '..' ha il nome 'punto' seguito da un'estensione che inizia con un punto e nient'altro ... Di solito c'è un'altra sfera curva da affrontare. –
Usa strchr primo membro di matrice vi darà il nome del file secondo membro di matrice vi darà estensione
Puoi approfondire questo? –
Non dimenticare un nome di file come 'this.uses.many.periods.jpg' –
Una funzione di farlo, insieme a un test harness:
#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;
}
L'esecuzione di questo con:
./program abc abc. abc.1 .xyz abc.def abc.def.ghi
ti dà:
[abc] - > []
[abc.] - > [.]
[abc.1] - > [.1]
[.xyz] - > [.xyz]
[abc.def] - > [.def]
[abc.def.ghi] - > [.ghi]
+1 per' strrchr'. Il miglior metodo per trovare l'ultima istanza di un carattere in una stringa. – tomlogic
Nel caso in cui qualcuno lo manchi. 'getExt()' presuppone che 'fspec' sia un nome di base, non un percorso completo. Prendi in considerazione per esempio "my.dir/file". Utilizzare 'basename()' per ottenere il nome base da un percorso completo. –
C'è una soluzione CRT portatile: _splitpath.
In Windows esiste anche un'API shell32 non documentata denominata PathGetExtension, ma questo è il male in tanti modi che probabilmente non avrei dovuto notare.
Questa è ovviamente una nuova definizione della parola "portatile" di cui ero precedentemente inconsapevole :-) Con scuse a Douglas Adams della fama di HHGTTG. – paxdiablo
Infatti, non ho mai visto la parola "portatile" e un link a msdn nella stessa frase :-) – Job
Il mio male, il mio male! Non modificare la risposta, per gli altri di godere :) –
- 1. Estensione del linguaggio C#?
- 2. Estensione del linguaggio C#, quanto sforzo/guadagno?
- 3. Quale parte del linguaggio C# è .ForEach()?
- 4. Stampa il nome del file corrente con estensione in C++
- 5. lotto: Rimuovere estensione del file
- 6. Node.js ottenere estensione del file
- 7. Iterator in linguaggio C
- 8. individuazione del carattere nella stringa linguaggio C
- 9. Xtext - linguaggio di più file
- 10. Lambda in C Metodo # estensione
- 11. linguaggio C: significato dell'operatore "#"?
- 12. Cambiare estensione del file utilizzando rubino
- 13. MacOSX - Estensione del file associata all'applicazione - Programmare
- 14. Espressione regolare per estensione del file
- 15. IDE linguaggio C gratuiti?
- 16. Elaborazione del linguaggio naturale in Windows 8
- 17. Modifica estensione file in SharePoint
- 18. estensione meno file in windows
- 19. set di estensione file iniziale durante il salvataggio del file
- 20. estensione del file è cambiare maiuscolo a minuscolo in CodeIgniter
- 21. Convalida estensione file in AngularJs prima del caricamento
- 22. Estensione dell'applicazione C# .NET - creare un linguaggio di scripting personalizzato o no?
- 23. PHP, ottenere il nome del file senza estensione di file
- 24. Sottosistemi di linguaggio C++ ufficiale
- 25. specifiche del linguaggio PHP?
- 26. validità del linguaggio copia-swap
- 27. Rimozione .php estensione del file con il file .htaccess
- 28. Estensione file Trim UITableView
- 29. Analisi lessicale del linguaggio di programmazione Python
- 30. Estensione file codice assembly
[SO 290488] (http://stackoverflow.com/questions/290488) copre molto lo stesso terreno. –
Quindi questo - http://stackoverflow.com/questions/51949/how-to-get-file-extension-from-string-in-c –
Possibile duplicato di [Ottenere estensione file in C] (http: // stackoverflow.com/questions/5309471/getting-file-extension-in-c) – nibot