2013-09-02 5 views
1

Как я могу получить правильный файл Тип изображения в формате JPEG. Но я могу получить тип файла для PDF-документа или файла sql. Я использую ниже код:Невозможно получить тип файла для определенного файла

public String Type 
{ 
     get 
     { 
      return GetType(Path.GetExtension(_document.DocumentPath)); 
     } 
} 
public static string ReadDefaultValue(string regKey) 
{ 
    using (var key = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(regKey, false)) 
    { 
     if (key != null) 
     { 
      return key.GetValue("") as string; 
     } 
    } 
    return null; 
} 

public string GetType(string ext) 
{ 
    if (ext.StartsWith(".") && ext.Length > 1) ext = ext.Substring(1); 
    var retVal = ReadDefaultValue(ext + "file"); 
    if (!String.IsNullOrEmpty(retVal)) return retVal; 

    using (var key = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey("." + ext, false)) 
    { 
     if (key == null) return ""; 
      using (var subkey = key.OpenSubKey("OpenWithProgids")) 
      { 
        if (subkey == null) return ""; 

        var names = subkey.GetValueNames(); 
        if (names == null || names.Length == 0) return ""; 

        foreach (var name in names) 
        { 
         retVal = ReadDefaultValue(name); 
         if (!String.IsNullOrEmpty(retVal)) return retVal; 
        } 
       } 
      } 

      return ""; 
     } 

Как я видел, что нет «OpenWithProgids» подключ в .pdf файл в смерзаться. , так что можно сделать, чтобы получить эти типы файлов.

Для примера В выигрыше типа 7 enter image description here

файла в список с именем файла и с другой информацией, я хочу того же тип файла в моем приложении я могу Xps документ, но не другого документ

+0

Вы хотите сказать, вы хотите, чтобы получить расширение файла? Например: 'Filename.png' будет возвращать' .png'? – Rohan

+0

Нет, я хочу, чтобы если файл был .png, тогда он возвращает PNG-изображение, например win 7 –

+0

@khushbu, так что ... если тип файла имеет .png, вы хотите отобразить это изображение в своем приложении? – Rohan

ответ

0

Я нашел этот код в другом ссылке, я знаю код такой же, но, как предложение дается другим, но ссылка

Get file type in .NET

с bobbymcr ответ поможет мне

2

Вы можете получить тип с помощью Windows API функции SHGetFileInfo

 [Flags] 
     private enum SHGFI : int 
     { 
      /// <summary>get type name</summary> 
      TypeName = 0x000000400, 
     } 

     [DllImport("shell32.dll", CharSet = CharSet.Auto)] 
     public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, 
      uint cbFileInfo, uint uFlags); 

     [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] 
     public struct SHFILEINFO 
     { 
      public IntPtr hIcon; 
      public int iIcon; 
      public uint dwAttributes; 

      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szDisplayName; 

      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] public string szTypeName; 
     }; 

     private static void Main() 
     { 
      SHGFI flags = SHGFI.TypeName; 
      SHFILEINFO shinfo = new SHFILEINFO(); 
      SHGetFileInfo(your path, 0, 
       ref shinfo, (uint) Marshal.SizeOf(shinfo),(uint) flags); 

      Console.WriteLine(shinfo.szTypeName); 

      Console.ReadKey(); 
     } 
+0

Это дает мне исключение, так как среда выполнения столкнулась с фатальной ошибкой. Адрес ошибки был равен 0x656ee556, в потоке 0xac. Код ошибки: 0xc0000005. Эта ошибка может быть ошибкой в ​​CLR или в небезопасных или не поддающихся проверке частях кода пользователя. Общие источники этой ошибки включают ошибки маршалинга пользователя для COM-interop или PInvoke, которые могут повредить стек. –

+0

У меня никогда не было этой ошибки, прежде чем я использую Visual Studio 2010 и Visual Studio 2012, и она работает правильно, без ошибок. – Alyafey

+0

Могут ли ошибки возникнуть из-за этого http://social.msdn.microsoft.com/Forums/en -US/72238339-3b16-4d09-93ee-e84401e6681b/native-exception-excpetion-code-0xc0000005 – Alyafey

Смежные вопросы