如何在文件被重命名后找到文件扩展名?是否有任何工具可用于此?
例如:我有一个文件“1.doc”,我希望每个人都知道这是一个Word文档,我只是将其重命名为“1.txt”。但实际上该文件是一个Word文档;如何获取原始文件扩展名?
例如:我有一个文件“1.doc”,我希望每个人都知道这是一个Word文档,我只是将其重命名为“1.txt”。但实际上该文件是一个Word文档;如何获取原始文件扩展名?
当然可以 :)
这是C#代码,你可以构建自己的工具 ;)
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";
}
}
FindMimeFromData
是基于模式识别和统计数据运行的,而不是魔法 :) - Piskvor left the buildingfile
在大多数情况下非常擅长“猜测”原始格式。请注意,“猜测”一词的强调。 - Piskvor left the building不行。你需要使用像 file
这样的工具来尝试检测文件的格式。