Por supuesto que puede :)
Este es el código C# para usted. Creo que se puede tobulid su propia herramienta;)
using System.Runtime.InteropServices;
using System.IO;
using Microsoft.Win32;
[DllImport(@"urlmon.dll", CharSet = CharSet.Auto)]
private extern static System.UInt32 FindMimeFromData(
System.UInt32 pBC,
[MarshalAs(UnmanagedType.LPStr)] System.String pwzUrl,
[MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer,
System.UInt32 cbSize,
[MarshalAs(UnmanagedType.LPStr)] System.String pwzMimeProposed,
System.UInt32 dwMimeFlags,
out System.UInt32 ppwzMimeOut,
System.UInt32 dwReserverd
);
public static string getMimeFromFile(string filename)
{
if (!File.Exists(filename))
throw new FileNotFoundException(filename + " not found");
byte[] buffer = new byte[256];
using (FileStream fs = new FileStream(filename, FileMode.Open))
{
if (fs.Length >= 256)
fs.Read(buffer, 0, 256);
else
fs.Read(buffer, 0, (int)fs.Length);
}
try
{
System.UInt32 mimetype;
FindMimeFromData(0, null, buffer, 256, null, 0, out mimetype, 0);
System.IntPtr mimeTypePtr = new IntPtr(mimetype);
string mime = Marshal.PtrToStringUni(mimeTypePtr);
Marshal.FreeCoTaskMem(mimeTypePtr);
return mime;
}
catch (Exception e)
{
return "unknown/unknown";
}
}
Usted obtiene los mimetype utilizando este código. Para encontrar la extensión de mime-type simplemente haz una pequeña búsqueda en Google.
"¿Qué hay en un nombre?" La extensión es solo un nombre y no tiene mucho que ver con el tipo real de contenido del archivo. – user562374
Otro canidate para [la etiqueta 'confusion-of-ideas'] (http://stackoverflow.com/questions/58640/great-programming-quotes/59001#59001) - ¿Qué hay en un nombre? – delnan
@delnan: No realmente. Varios formatos de archivo tienen signos característicos después de los cuales podrían ser reconocidos (ver, por ejemplo, formatos PNG o GIF). OTOH, Windows solía (¿todavía no está seguro?) Reconocer un tipo de archivo * solo * por la extensión del archivo, por lo que si cambia el nombre del archivo, Windows no tiene ni idea de qué hacer con él. – Piskvor