文件类型 - 获取原始扩展名

时间:2011-01-05 13:01:24

标签: file file-format

如果文件已重命名,如何查找文件扩展名? 有没有可用的工具?

示例:我有一个文件“1.doc”;我希望每个人都知道这是一个我刚刚重命名为“1.txt”的Word文档。但该文件最初是一个Word文档;我怎样才能获得原始文件扩展名?

3 个答案:

答案 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命令确定文件格式。

如果你对这样的事情真的很偏执(并弄乱你的工作流程),你可以做两件事:

  1. 对您的文件进行哈希处理,例如MD5哈希,以便您知道自己的文件没有被修改
  2. 记下您文件的时间戳,以便查看最后一次更改时间
  3. 在该时间戳记录您文件的扩展名
  4. 这会以几种方式保护你:

    哈希将确保您的文件未被更改。

    时间戳将告诉您上次修改时间。

    扩展程序会告诉您原始扩展程序。

    由于只是重命名文件的扩展名不会修改其时间戳,因此您需要执行第3步。

    使用此类技术会在99.99999999999%的情况下告诉您文件已被某人或某人修改过。

答案 2 :(得分:1)

你做不到。您必须使用file之类的工具来尝试检测文件的格式。