Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/10: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Gepar
1181 / 537 / 77
Регистрация: 01.07.2009
Сообщений: 3,517
1

Определить тип файла

03.04.2013, 00:09. Просмотров 1900. Ответов 8
Метки нет (Все метки)

Как можно определить тип файла (достать из системы информацию) в WINAPI подскажите пожалуйста.

Я что-то не могу выгуглить так как по запросу file type оно начинает искать информаию о том как определить само расширение, но мне надо именно вытянуть из системы как этот тип файла в ней зарегистрирован.

Добавлено через 8 минут
Также мне необходимо как-то узнать описание файла (не знаю что под этим имеют в виду) и название организации (это применительно к DLL файлам). В общем-то всё это относится к файлам так что не буду создавать новую тему, если вы знаете как это сделать то ответьте пожалуйста, ссылки на msdn на соотв. функцию или же её названия будет достаточно в принципе
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2013, 00:09
Ответы с готовыми решениями:

Получить тип файла
В проводнике есть вкладка: "Тип файла". Какая функция WinApi отвечает за...

Определить имя/тип COM порта
Есть USB-устройство, есть к нему драйвер, который позволяет общаться с...

Во время компиляции определить, является ли тип полным
Доброго времени суток. Это уже моя далеко не первая попытка создать детектор...

Определить размер файла
Мне нужно определить размер какого-либо файла на языке Си: для этого мне нужно...

Посимвольным считыванием файла определить, является он символьным или бинарным, вывести статистику
Условие : Посимвольным считыванием файла определить, является он символьным или...

8
Игорь с++
473 / 465 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
03.04.2013, 00:10 2
т.е. тебе надо чем система открывает данный файл ? Если да , то гугли информацию где в реестре располагаются зарегистрированые расширение файлов и вытягивай программно информацию с этой ветки реестра .
1
Gepar
1181 / 537 / 77
Регистрация: 01.07.2009
Сообщений: 3,517
03.04.2013, 00:51  [ТС] 3
Игорь с++, не, не совсем, мне нужно как система понимает этот файл, txt она обычно понимает как "текстовый файл", exe как "Приложение (.exe)". Ну тоесть мне наверное надо информация которую отображает эксполер когда выбрать свойства у файла, там вверху строка есть "Тип файла". А вообще я не уверен что от меня хотят, сказано тип файла должна определять моя программа.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26363 / 17688 / 7004
Регистрация: 22.10.2011
Сообщений: 31,124
Записей в блоге: 6
03.04.2013, 02:33 4
Цитата Сообщение от Gepar Посмотреть сообщение
мне нужно как система понимает этот файл
Открываешь ветку HKEY_CLASSES_ROOT, ищешь расширение нужного тебе файла (из тех subkeys, которые начинаются с точки), нашел - открываешь этот SubKey, там есть "(Default)", в нем записана строка (REG_SZ), берешь ее и открываешь в HKEY_CLASSES_ROOT SubKey с именем, записанным в эту строку. Там в "(Default)" и находится нужное тебе описание.

Пример: файл с расширением .7z -
находим сам .7z
Определить тип файла

, а теперь - то, что в его (Default)-е
Определить тип файла

Это и есть File type description

Идея понятна? Автоматизировать сможешь?
0
Gepar
1181 / 537 / 77
Регистрация: 01.07.2009
Сообщений: 3,517
03.04.2013, 12:02  [ТС] 5
Цитата Сообщение от UI Посмотреть сообщение
Идея понятна? Автоматизировать сможешь?
Ну я надеялся на какую-тоа стандартную функцию Конкретно с реестром не работал через винапи руками, ну так чтобы редактировать / получать заданный параметр, можно пожалуйста кратенький пример как получить строковое представление для опред. расширения файла.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26363 / 17688 / 7004
Регистрация: 22.10.2011
Сообщений: 31,124
Записей в блоге: 6
03.04.2013, 13:28 6
Лучший ответ Сообщение было отмечено volvo как решение

Решение

В данном случае ничего редактировать не надо:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    HKEY hKey, hKey2;
    LONG lResult = RegOpenKeyEx (HKEY_CLASSES_ROOT, _T(".7z"), 0, KEY_READ, &hKey);
    if(lResult == ERROR_SUCCESS)
    {
        DWORD type = 0;
        DWORD dataSize = 256;
        TCHAR data[256] = {0};
        TCHAR str[256] = {0};
        lResult = RegQueryValueEx(hKey, NULL, NULL, NULL, (LPBYTE)data, &dataSize);
 
        // Обработку ошибок добавь сам
        lResult = RegOpenKeyEx (HKEY_CLASSES_ROOT, data, 0, KEY_READ, &hKey2);
        dataSize = 256;
        lResult = RegQueryValueEx(hKey2, NULL, NULL, NULL, (LPBYTE)str, &dataSize);
 
        if(lResult == ERROR_SUCCESS)
        {
            MessageBox(0, str, _T("Description"), MB_OK);
        }
        RegCloseKey(hKey2);
    }
    RegCloseKey(hKey);
MessageBox показал:
0
Изображения
 
Gepar
1181 / 537 / 77
Регистрация: 01.07.2009
Сообщений: 3,517
03.04.2013, 16:14  [ТС] 7
UI, большое спасибо, вечером обязательно попробую и сообщу о результатах.
0
Gepar
1181 / 537 / 77
Регистрация: 01.07.2009
Сообщений: 3,517
05.04.2013, 02:07  [ТС] 8
UI, всё работает, большое спасибо, только это:
Цитата Сообщение от UI Посмотреть сообщение
if(lResult == ERROR_SUCCESS)
wtf ? Если ошибка - продолжаем, но ... почему ?
Нет, я вижу что lresult == null если действительно ошибка, но почему константа названа не SUCCESS, а именно ERROR_SUCCESS ?
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26363 / 17688 / 7004
Регистрация: 22.10.2011
Сообщений: 31,124
Записей в блоге: 6
05.04.2013, 11:32 9
Реймонд Чен в своем блоге объяснил это вот так:
It's called ERROR_SUCCESS because it's an error code (and therefore must be named ERROR_something) but no error occurred.
1
05.04.2013, 11:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2013, 11:32

почему $_FILES не всегда определяет тип файла? каким образом можно определить тип в 100% случаях?
почему $_FILES не всегда определяет тип файла? каким образом можно определить...

Определить тип файла
Скажем имеется некий архив (Пусть это будет Rar). Когда его открываешь как...

Определить тип файла / ресурса
Приветствую ! Недавно обновилась такая программа, как aida64 и ее...


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

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

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