开发者

File Type - Get Original Extension

Ho开发者_开发技巧w to find file extension if the file has been renamed? Is there any tool are available for this?

Example: I have a file "1.doc"; I hope everybody know this is a Word document I just renamed as "1.txt". But the file is a Word document originally; how can I get the original file extension?


Of Course You can :)

This is the C# code for you. I guess you can bulid your own tool ;)

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";
        }
    }

You get the mimetype using this code. To find the extension from mime-type just do a little google search.


Impossible. If you're on a *nix type system, use the file command to determine file format.

If you're really paranoid about stuff like this happening (and messing up your workflow), you can do 2 things:

  1. make a hash of your file, for example, an MD5 hash so you know your file hasn't been tinkered with
  2. take note of your file's timestamp so you can see when was the last time it changed
  3. take note of your file's extension at that timestamp

This will guard you in few ways:

The hash will make sure your file hasn't been changed.

The timestamp will tell you the last time it was modified.

The extension will tell you its original extension.

Since just renaming file's extension won't modify its timestamp, you need step 3.

Using techniques like this will tell you in 99.99999999999% cases that your file has been modified by something or somebody.


You can't. You'd have to use a tool like file to try and detect the file's format.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜