Я украл кусок кода с pinkode.net, я думаю, что это - это найдет mimetype любого файла. Он прекрасно работает и очень нужен. Когда я помещаю код в наш пакет служб SSIS, который будет вызывать метод, он всегда возвращает один и тот же mimetype, application / octet-stream. Это очень узкое применение этого метода, поскольку я оцениваю только .xls? файлы. Он отлично работает на моем проекте VS рабочей станции, но тот же код на сервере работает нормально, но возвращает тот же тип.
Что / где определяется этот тип поведения на сервере Windows 10? Файловые ассоциации мешают? Я полностью в замешательстве относительно того, почему это не работает и действительно не попробовало. Я мог бы найти и сохранить mimetype для файлов, о которых я знаю, но цель этого процесса ETL состояла в том, чтобы иметь возможность проанализировать любое превосходство в необработанном состоянии. Получение mimetype из файла имеет решающее значение для достижения поставленной цели, и оно работало до тех пор, пока не работало на сервере БД.
...
public static string getMimeFromFile(string file)
{
IntPtr mimeout;
if (!System.IO.File.Exists(file))
throw new FileNotFoundException(file + " not found");
int MaxContent = (int)new FileInfo(file).Length;
if (MaxContent > 4096) MaxContent = 4096;
FileStream fs = File.OpenRead(file);
byte[] buf = new byte[MaxContent];
fs.Read(buf, 0, MaxContent);
fs.Close();
int result = FindMimeFromData(IntPtr.Zero, file, buf, MaxContent, null, 0, out mimeout, 0);
if (result != 0)
throw Marshal.GetExceptionForHR(result);
string mime = Marshal.PtrToStringUni(mimeout);
Marshal.FreeCoTaskMem(mimeout);
return mime;
}
...