Necesito un método que pueda decirme si un archivo es de imagen, audio o video. ¿Puedo hacer esto con C#?Comprueba si el archivo es un archivo multimedia en C#
Respuesta
Depende de lo robusta que quiere que sea.
La forma más sencilla de hacerlo es comprobar la extensión, así:
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());
}
EDITAR: Para aquellos que realmente quieren LINQ, aquí está:
return mediaExtensions.Contains(Path.GetExtension(path), StringComparer.OrdinalIgnoreCase);
Tenga en cuenta que la extensión de un archivo no es un indicador confiable de su contenido; cualquiera puede cambiar el nombre de un archivo y cambiar su extensión.
Si no tiene la extensión, o si no confía en ella, puede leer el principio del archivo y ver si coincide con las firmas de archivos para los formatos de medios comunes.
Siempre puede verificar la extensión del archivo.
¿Por qué se bajó este valor? Es una respuesta perfectamente aceptable, aunque le falta una muestra de código. – Thomas
@Thomas: los puntajes dicen que este es un caso marginal, lo que parece válido: 'Cualquier respuesta que haga que el consultante vaya en la dirección correcta es útil, pero trate de mencionar cualquier limitación, suposición o simplificación en su respuesta. La brevedad es aceptable, pero las explicaciones más completas son mejores. Https://stackoverflow.com/help/how-to-answer – Stefan
Método 1: El más fácil: análisis de nombre de archivo. Si el nombre de archivo coincide con una lista conocida de tipos de archivos multimedia (es decir, jpg gif wmv avi mp4, etc.), coincide con un archivo de video, audio o imagen. Esto no es tan sólido ya que puedo nombrar fácilmente un archivo de texto con la extensión .avi o .jpg, pero eso no necesariamente lo convierte en un archivo multimedia.
Método 2: Más difícil - Parse el encabezado del archivo. Por ejemplo, en CodeProject hay un artículo C# RIFF Parser o este artículo de CodeProject en Extracting IPTC header information from JPEG images
Finalmente terminará teniendo que usar una combinación de ambos métodos. La mayoría de lo que estás preguntando ya está integrado en .NET Framework.
El otro problema con el método 2 es que debe tener un analizador para cada tipo de archivo y otros tipos de archivos. no será reconocido hasta que implemente su analizador ... – GalacticCowboy
@GC: Sí, correcto –
Sí, pero a menos que esté utilizando un componente para hacerlo, tendrá que escribir un código para cargar al menos los encabezados de esos archivos para comprobar si no están dañados. Si los archivos se almacenan en una manera fiable, puede tal vez sólo comprobar su extensión de archivo
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
}
Creo que debería ser una buena práctica explicar por qué el voto negativo. Si lo que se espera es una simple implementación ingenua, la respuesta es muy simple. ¿Pero qué pasa si alguien cambia la extensión de sus archivos y desordena sus nombres? ¿Crees en Santa Claws? – Andres
No he votado negativamente.pero para empezar, no todas las extensiones serán minúsculas, e imagine el tipo de afirmación gigantesca que tiene que ser para captar todos los tipos de medios. –
Ok, es por eso que EndsWith tiene un segundo parámetro que decir para ignorar el caso de caracteres. Ahora creo que las respuestas de otros deberían ser votadas también, ya que son similares a las mías en el significado – Andres
- 1. Comprueba si NSURL es el archivo local
- 2. Comprueba si un archivo es real o un enlace simbólico
- 3. ¿Comprueba si un archivo es binario o ASCII con Node.js?
- 4. ¿Comprueba si el archivo existe y ejecuta un archivo por lotes en PowerShell?
- 5. Comprueba si se está ejecutando un archivo exe específico
- 6. ¿Comprueba si el archivo es más reciente que algún otro archivo?
- 7. HTML5 File API simple comprueba si el archivo existe
- 8. Cómo transmitir un archivo multimedia usando PHP?
- 9. Comprueba si el sistema tiene sonido C#
- 10. ¿Cómo puedo determinar si un archivo es un archivo PDF?
- 11. ¿Cómo puedo verificar si un archivo es un archivo normal en C++?
- 12. Determinar si un archivo es un duplicado
- 13. ¿Por qué Visual Studio comprueba el archivo .vspscc cuando agrego un archivo a un proyecto?
- 14. Detectar si el archivo es MP3
- 15. Obtener detalles del archivo multimedia actual que se está reproduciendo en el reproductor multimedia de Android
- 16. C++ - Detecta si un archivo es PNG o JPEG
- 17. Comprueba si el archivo ya está en el control de código fuente
- 18. prueba si el archivo no es un directorio en Perl
- 19. Comprobar si el archivo es un enlace simbólico en python
- 20. Cómo comprobar si un archivo existe en un archivo MAKE
- 21. C compruebe si el archivo existe
- 22. compruebe si un archivo es ejecutable
- 23. Comprobar si un archivo es una imagen
- 24. ¿Cómo comprobar si el archivo es binario?
- 25. ¿Cómo puedo saber si un archivo en un FTP es idéntico a un archivo local sin realmente descargar el archivo?
- 26. Comprueba si un archivo no está abierto (no usado por otro proceso) en Python
- 27. ¿Comprueba el tamaño del archivo en S3 sin descargarlo?
- 28. ¿Cómo puedo averiguar si un archivo es un archivo o directorio si no existe?
- 29. Comprueba si un número es racional en Python
- 30. Comprueba si es el último registro en sqldatareader
Punto de aclaración: desea saber si pertenece a * cualquier * de las categorías ("es un archivo multimedia") o * a qué categoría pertenece ("es una imagen/es audio/es video"))? – GalacticCowboy
Realmente no hace la diferencia. – SLaks
@SLaks: correcto, es prácticamente una semántica, pero la solución debería ser un poco más inteligente que una simple colección de extensiones. Tendría que asignar esa extensión a algún significado de nivel superior. – GalacticCowboy