我相信是从pinkode.net窃取了一部分代码-它将找到任何文件的模仿类型。它运作良好,非常需要。当我将代码推送到将调用该方法的SSIS包中时,它总是返回相同的mimetype,即application / octet-stream。这种方法的使用范围非常狭窄,因为我只评估.xls?文件。它可以在我的工作站VS项目上正常运行,但是服务器上的相同代码可以正常运行,但是返回相同的类型。
在Windows 10服务器上定义什么类型的行为?文件关联妨碍了?我完全不知道为什么它不起作用并且还没有真正尝试过。我可以找到并保留我所知道文件的模仿类型,但是ETL过程的目标是能够将所有excel解析为原始状态。从文件中获取mimetype对于达到既定目标至关重要,直到它驻留在db服务器上之前,它一直可以正常工作。 ...
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;
}
...