Ho bisogno di un metodo che possa dirmi se un file è un'immagine, un file audio o video. Posso farlo con C#?Verifica se il file è un file multimediale in C#
risposta
Dipende da come robusto si vuole che sia.
Il modo più semplice per farlo è quello di verificare l'estensione, in questo modo:
static string[] mediaExtensions = {
".PNG", ".JPG", ".JPEG", ".BMP", ".GIF", //etc
".WAV", ".MID", ".MIDI", ".WMA", ".MP3", ".OGG", ".RMA", //etc
".AVI", ".MP4", ".DIVX", ".WMV", //etc
};
static bool IsMediaFile(string path) {
return -1 != Array.IndexOf(mediaExtensions, Path.GetExtension(path).ToUpperInvariant());
}
EDIT: Per chi vuole veramente LINQ, eccolo:
return mediaExtensions.Contains(Path.GetExtension(path), StringComparer.OrdinalIgnoreCase);
Si noti che l'estensione di un file non è un indicatore affidabile del suo contenuto; chiunque può rinominare un file e modificarne l'estensione.
Se non si dispone dell'estensione o se non ci si fida di esso, è possibile leggere l'inizio del file e verificare che corrisponda alle firme dei file per i formati multimediali comuni.
È sempre possibile verificare l'estensione del file.
Perché è stato downvoted? È una risposta perfettamente accettabile anche se manca un esempio di codice. – Thomas
@Thomas: lo spartito dice che questo è un caso limite, che sembra valido: "Qualsiasi risposta che faccia andare il colpevole nella giusta direzione è utile, ma cerca di menzionare eventuali limitazioni, ipotesi o semplificazioni nella tua risposta. Brevity è accettabile, ma le spiegazioni più complete sono migliori. Https://stackoverflow.com/help/how-to-answer – Stefan
Metodo 1: Il più semplice: analisi del nome del file. Se il nome del file corrisponde a un elenco noto di tipi di file multimediali (ad esempio jpg gif wmv avi mp4 ecc.), Corrisponde a un file video, audio o immagine. Questo non è così robusto dato che posso facilmente nominare un file di testo con l'estensione .avi o .jpg, ma questo non lo rende necessariamente un file multimediale.
Metodo 2: Harder - Intestazione del file di analisi. Ad esempio, su CodeProject c'è un C# RIFF Parser o questo articolo CodeProject su Extracting IPTC header information from JPEG images
Finirai per dover utilizzare una combinazione di entrambi i metodi. La maggior parte di ciò che stai chiedendo è già integrato nel framework .NET.
L'altro problema con il metodo 2 è che devi avere un parser per ogni tipo di file e altri tipi di file non verrà riconosciuto fino a quando non si implementa il parser ... – GalacticCowboy
@GC: Sì, corretto –
Sì, ma se non si sta utilizzando un componente per farlo, è necessario scrivere il codice per caricare almeno le intestazioni di tali file al fine di verificare se non sono danneggiati. Se i file sono memorizzati in modo affidabile, si può forse resta che verificare l'estensione del file
foreach(string file in Directory.GetFiles("c:\\MyDir\\")
{
if(file.EndsWith("jpg", false, null))
//treat as image file
else if(file.EndsWith("avi", false, null))
//treats as avi video
//and so on
}
Penso che dovrebbe essere una buona pratica spiegare perché il voto negativo. Se ciò che è previsto è una semplice implementazione ingenua, la risposta è molto semplice. Ma cosa succede se qualcuno cambia l'estensione dei file e si incasina con i loro nomi? Credi in Santa Claws? – Andres
non ho fatto downvot.ma per i principianti non tutte le estensioni saranno minuscole, e immaginate il tipo di gigantesca dichiarazione se questa deve essere per catturare tutti i tipi di media .. –
Ok, ecco perché EndsWith ha un secondo parametro per dire di ignorare il carattere. Ora penso che anche le altre risposte dovrebbero essere rifiutate perché sono simili al mio nel significato – Andres
- 1. Verifica se il file è completamente scritto
- 2. Verifica se il file Localizable.strings è valido
- 3. Verifica se un flusso è un file zip
- 4. Verifica se il file di risorse esiste
- 5. Verifica UWP se il file esiste
- 6. Node.js verifica se il percorso è file o directory
- 7. linux + verifica se il file è testo o binario
- 8. Qt: verifica se un file nella cartella è stato modificato
- 9. verifica se un file binario è stato compilato con "-static"
- 10. Come verificare se il file esiste in Qt in C++
- 11. Verifica se esiste un file/directory: c'è un modo migliore?
- 12. Come verificare se un file è già aperto in C
- 13. Verifica se esiste un file utilizzando un carattere jolly
- 14. verifica se il file xml esiste con XSLT 2.0, saxon9HE
- 15. Javascript verifica se il file (txt) contiene string/variabile
- 16. Verifica se il file esiste su Amazon s3 URL firmato
- 17. Verifica se il cookie è impostato
- 18. Android; Verifica se il file esiste senza crearne uno nuovo
- 19. C# Serial Port Verifica se il dispositivo è collegato
- 20. Verifica se il percorso è una directory in Swift2?
- 21. C# Verifica se il pulsante è stato premuto
- 22. Verifica se il valore è un numero intero in Sass
- 23. Nodejs - Verifica file nascosti
- 24. Verifica esistenza file in Julia
- 25. Come posso verificare se un file è eseguibile in node.js?
- 26. C#: controlla se un file non è bloccato e scrivibile
- 27. Rileva se il file è MP3
- 28. C++ - Rileva se un file è PNG o JPEG
- 29. Come verificare se un file è un file immagine valido?
- 30. verificare se un file è un file di immagine
Punto di chiarimento: vuoi sapere se rientra in * qualsiasi * delle categorie ("è un file multimediale"), o * quale * categoria rientra in ("è un'immagine/è audio/è video")? – GalacticCowboy
Non fa davvero la differenza. – SLaks
@SLaks: corretto, è praticamente solo semantica, ma la soluzione dovrebbe essere leggermente più intelligente di una semplice raccolta di estensioni. Dovrebbe mappare quell'estensione ad un significato di livello superiore. – GalacticCowboy