如果文件已重命名,如何查找文件扩展名? 有没有可用的工具?
示例:我有一个文件“1.doc”;我希望每个人都知道这是一个我刚刚重命名为“1.txt”的Word文档。但该文件最初是一个Word文档;我怎样才能获得原始文件扩展名?
答案 0 :(得分:4)
当然你可以:)
这是您的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";
}
}
使用此代码获取mimetype。要从mime-type中找到扩展名,只需进行一些谷歌搜索。
答案 1 :(得分:3)
不可能。如果您使用的是* nix类型系统,请使用file命令确定文件格式。
如果你对这样的事情真的很偏执(并弄乱你的工作流程),你可以做两件事:
这会以几种方式保护你:
哈希将确保您的文件未被更改。
时间戳将告诉您上次修改时间。
扩展程序会告诉您原始扩展程序。
由于只是重命名文件的扩展名不会修改其时间戳,因此您需要执行第3步。
使用此类技术会在99.99999999999%的情况下告诉您文件已被某人或某人修改过。
答案 2 :(得分:1)
你做不到。您必须使用file
之类的工具来尝试检测文件的格式。