Naturalmente puoi :)
Questo è il codice C# per te. Credo che si può bulid il proprio strumento;)
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";
}
}
È possibile ottenere i mimetype utilizzando questo codice. Per trovare l'estensione da mime-type basta fare una piccola ricerca su google.
"Cosa c'è in un nome." L'estensione è solo un nome e non ha molto a che fare con il tipo effettivo di contenuto del file. – user562374
Un altro canidate per [il tag 'confusion-of-ideas'] (http://stackoverflow.com/questions/58640/great-programming-quotes/59001#59001) - cosa c'è in un nome? – delnan
@delnan: Non proprio. Vari formati di file hanno segni caratteristici dopo i quali potrebbero essere riconosciuti (vedi ad esempio formati PNG o GIF). OTOH, Windows usato per (ancora non lo è) riconosce un tipo di file * solo * dall'estensione del file - quindi se si rinomina il file, Windows non ha alcun senso a che fare con esso. – Piskvor