Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
p_r_a_g_m_a
109 / 61 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 1
#1

Как получить описание типа файла по его расширению - C++

08.03.2012, 16:23. Просмотров 684. Ответов 1
Метки нет (Все метки)

Подскажите пожалуйста какие есть функции (например WINAPI) с помощью которых можно получить описание типа файла (т.е. описание которое дает программа с которой файл ассоциирован в системе, например *.txt - текстовый документ, и т.д.).

Я нашел один способ - данные из реестра. Но вот только строка с описанием типа файла на английском языке. И почему-то не удается получить описание *.xml файла (как я понял что-то не так с функцией RegQueryValueEx. Ветку HKEY_CLASSES_ROOT\.xml читает нормально, а вот HKEY_CLASSES_ROOT\xmlfile не хочет.), получаю пустую строку. Вот часть кода:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
CString type = PathFindExtension(m_File);
HKEY rKey;
 
if (type == "")
    type = "File";
else
{
    if(RegOpenKeyEx(HKEY_CLASSES_ROOT, type, 0, KEY_QUERY_VALUE, &rKey) == ERROR_SUCCESS)
    {
        HKEY fKey;
        DWORD pcbData = 255;
        char* pvData = new char[pcbData];
 
        RegQueryValueEx(rKey, "", NULL, NULL, (LPBYTE)pvData, &pcbData);
        if(RegOpenKeyEx(HKEY_CLASSES_ROOT, pvData, 0, KEY_QUERY_VALUE, &fKey) == ERROR_SUCCESS)
        {
            memset(pvData, 0, pcbData);
            RegQueryValueEx(fKey, "", NULL, NULL, (LPBYTE)pvData, &pcbData);
            type = pvData;
        }
        else
            type = "";
        RegCloseKey(fKey);
        delete[] pvData;
    }
    else
        type = PathFindExtension(m_File);
    RegCloseKey(rKey);
}
m_ListCtrl->SetItemText(nNum, 1, type);
Вот данные реестра:
Код
[HKEY_CLASSES_ROOT\.xml]
@="xmlfile"
"Content Type"="text/xml"
"PerceivedType"="text"

[HKEY_CLASSES_ROOT\.xml\OpenWithList]

[HKEY_CLASSES_ROOT\.xml\OpenWithList\vsta.exe]
@=""

[HKEY_CLASSES_ROOT\.xml\OpenWithList\winword.exe]
@=""

[HKEY_CLASSES_ROOT\.xml\OpenWithProgids]
"InfoPath.Document.3"=""
"VSTA.xml.8.0"=""
"VisualStudio.xml.10.0"=""

[HKEY_CLASSES_ROOT\.xml\PersistentHandler]
@="{7E9D8D44-6926-426F-AA2B-217A819A5CCE}"
Код
[HKEY_CLASSES_ROOT\xmlfile]
@="XML Document"
"EditFlags"=hex:00,00,00,00
"FriendlyTypeName"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,\
  00,6f,00,6f,00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,\
  32,00,5c,00,6d,00,73,00,78,00,6d,00,6c,00,33,00,72,00,2e,00,64,00,6c,00,6c,\
  00,2c,00,2d,00,31,00,00,00

[HKEY_CLASSES_ROOT\xmlfile\BrowseInPlace]

[HKEY_CLASSES_ROOT\xmlfile\CLSID]
@="{48123BC4-99D9-11D1-A6B3-00C04FD91555}"

[HKEY_CLASSES_ROOT\xmlfile\DefaultIcon]
@="\"%1\""

[HKEY_CLASSES_ROOT\xmlfile\shell]
@="open"

[HKEY_CLASSES_ROOT\xmlfile\shell\edit]

[HKEY_CLASSES_ROOT\xmlfile\shell\edit\command]
@="\"C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE14\\MSOXMLED.EXE\" /verb edit \"%1\""

[HKEY_CLASSES_ROOT\xmlfile\shell\open]

[HKEY_CLASSES_ROOT\xmlfile\shell\open\command]
@="\"C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE14\\MSOXMLED.EXE\" /verb open \"%1\""

[HKEY_CLASSES_ROOT\xmlfile\ShellEx]

[HKEY_CLASSES_ROOT\xmlfile\ShellEx\IconHandler]
@="{AB968F1E-E20B-403A-9EB8-72EB0EB6797E}"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2012, 16:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как получить описание типа файла по его расширению (C++):

Написать программу поиска файла на ПК по его расширению, и отправки его на e-mail - C++
Я ищу человека который мне поможет написать программу для поиска файла на ПК по его расширению, и отправка его на e-mail , лучше бы чтобы...

Узнать тип файла по его расширению - C++
Здравствуйте, собственно вот что требуется: имея полный путь к файлу и его расширение узнать тип файла, например для .mp3/.flac/.m4a и...

Как можно получить дату и время создания файла и его объем? - C++
Здравствуйте! Скажите пожалуйста как можно получить дату и время создания файла и его объем. Задача такова, что мы создаем текстовый файл с...

Чтение файла с данными типа real. Тип real в билдере или как его "обойти"? - C++
Читаю файл в структуру, double Fdat; struct STR { ... } rec

Где пишется описание для выходного файла .exe (например описание процесса) - C++
Консольный проект, скомпилировали, получили exe. Жмем правой кнопкой на нем\свойства\вкладка подробно, почти все описание exe файла...

Из XML-файла извлечь значения его атрибутов в массив типа std::vector<int> - C++
Всем привет. Есть XML-файл, из которого требуется извлечь значения его атрибутов. Подскажите, пожалуйста, несколько способов это сделать...

1
MickeS
11 / 11 / 2
Регистрация: 24.02.2013
Сообщений: 40
25.02.2013, 00:50 #2
Сам на такую бяку наткнулся ...
Решил с использованием библиотеки Microsoft Scripting Runtime.

vb.net
1
2
3
4
Dim fso as New System.Scripting.FileSystemObject
Dim f as System.Scripting.File
f=fso.GetFile("C:\1.doc")
MessageBox.Show f.Type
Выдаёт "Документ Microsoft Word 97-2003". Но только если файл C:\1.doc есть.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2013, 00:50
Привет! Вот еще темы с ответами:

В начало бинарного файла целого типа нужно дописать его минимальное значение, а в конец максимальное - C++
В начало бинарного файла целого типа нужно дописать его минимальное значение, а в конец максимальное. В общем я написал но оно почему то...

Как программно получить заначение типа переменной. - C++
Как программно получить заначение типа переменной, int ? float ? и тд?

Описание класса определённого типа - C++
Доброго времени суток!!! Могули я описать класс определённого типа данных, например чтобы потом была возможна конструкция: MyClass...

Получить описание EXE файла из его свойств - Visual Basic .NET
Необходимо получить строку с описанием EXEшника как на скрине внизу, пробовал использовать WMI не помогло, есть ли какие средства для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru