C# 使用c检查原始文件类型#
我创建了一个程序来检查文件是否有原始扩展名。 例如,File.txt是原始文件,之后它会更改为File.jpeg,然后如何知道原始文件扩展名 我的代码片段是C# 使用c检查原始文件类型#,c#,mime-types,C#,Mime Types,我创建了一个程序来检查文件是否有原始扩展名。 例如,File.txt是原始文件,之后它会更改为File.jpeg,然后如何知道原始文件扩展名 我的代码片段是 string filename = openFileDialog1.FileName; string originalFileExt = Path.GetExtension(filename); string type = ScanFileForMimeType(filename); Mess
string filename = openFileDialog1.FileName;
string originalFileExt = Path.GetExtension(filename);
string type = ScanFileForMimeType(filename);
MessageBox.Show("Mime type : " + type);
if (type == "application/octet-stream")
{
type = System.Web.MimeMapping.GetMimeMapping(filename);
MessageBox.Show(type + "");
}
RegistryKey key = Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type\" + type, false);
object value = key != null ? key.GetValue("Extension", null) : null;
string result = value != null ? value.ToString() : string.Empty;
MessageBox.Show("File Extension : " + result);
private static string ScanFileForMimeType(string fileName)
{
try
{
byte[] buffer = new byte[256];
//using (FileStream fs = new FileStream(fileName, FileMode.Open))
//{
// int readLength = Convert.ToInt32(Math.Min(256, fs.Length));
// fs.Read(buffer, 0, readLength);
//}
UInt32 mimeType = default(UInt32);
FindMimeFromData(0, null, buffer, 256, null, 0, ref mimeType, 0);
IntPtr mimeTypePtr = new IntPtr(mimeType);
string mime = Marshal.PtrToStringUni(mimeTypePtr);
Marshal.FreeCoTaskMem(mimeTypePtr);
if (string.IsNullOrEmpty(mime))
mime = "application/octet-stream";
return mime;
}
catch (Exception ex)
{
return ex.ToString();
}
}
但是我没有得到MS Office文件的mime类型,如.docx、.pptx等。您使用的是系统mime类型,这意味着如果您没有安装处理这些mime类型的应用程序,它们将不会出现……而且,您的缓冲区是空的,您必须用文件的内容填充它。FindMimeFromData无法确定那些Mime类型-例如,一种有趣但不同的方法是检查文件本身。如果您知道可能遇到的文件类型的范围,这可能是有益的。看,我不认为你能找出它是否是一个txt文件,因为txt就是这样:一些数据,并解释为可读文本。它没有页眉、页脚或其他任何内容。我唯一能想象的是,如果你不能确定类型,你应该默认为txt。