Средства диалога выбора файла - C (СИ)
Формулировка задачи:
Есть ли какие-то минимальные средства для реализации диалога выбора файла на С
(в консольной программе)
другими словами, чтобы не писать стандартное типа
а чтобы хотя бы например для данной папки получить например внутри программы весь список файлов
скажем с расширением *txt или *.dat
И дать возмжность выбора пользователю программы?
FILE * f; f=fopen("dan.txt","r");
Решение задачи: «Средства диалога выбора файла»
textual
Листинг программы
#include <stdlib.h> #include <shlobj.h> #include <stdio.h> BOOL SelectFile(char * sPath, const char * szTitle) { BOOL bRet = FALSE; LPCITEMIDLIST lpItemDList; BROWSEINFO bi = { NULL, NULL, sPath, szTitle, BIF_DONTGOBELOWDOMAIN|BIF_BROWSEINCLUDEFILES, NULL, NULL, 0 }; if((lpItemDList=SHBrowseForFolder(&bi))) { if((bRet = SHGetPathFromIDList(lpItemDList, sPath))) GetShortPathName((LPCTSTR)sPath,sPath,strlen(sPath)); else sPath[0] = '\0'; } return bRet; } int main() { char sPath[256] = {0}; if(!SelectFile(sPath, "Âûáåðèòå ГґГ*éë èëè ГЄГ*ГІГ*ëîã")) printf("Error open path %s\n",strerror(GetLastError())); else printf("Selected path %s\n",sPath); system("pause"); return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек: stdlib.h, shlobj.h, printf.h
- Определение функции SelectFile с двумя параметрами: sPath (строка пути к файлу) и szTitle (строка заголовка диалога выбора файла).
- Инициализация переменной bRet в качестве логического значения FALSE.
- Создание структуры BROWSEINFO с полями: hWndOwner (дескриптор окна), pidl (дескриптор элемента списка), sPath (путь к файлу), szTitle (заголовок диалога), wFlags (флаги для функции SHBrowseForFolder), lParam (параметр для функции SHBrowseForFolder), pszDisplayName (строка для функции SHBrowseForFolder), cchDisplayName (размер строки pszDisplayName).
- Если функция SHBrowseForFolder вернула ненулевой результат, то инициализируем переменную bRet в качестве логического значения TRUE и вызываем функцию SHGetPathFromIDList для получения пути к файлу из дескриптора элемента списка.
- Если функция SHGetPathFromIDList вернула ненулевой результат, то вызываем функцию GetShortPathName для получения краткого пути к файлу.
- Если функция SHGetPathFromIDList вернула ненулевой результат, то выводим сообщение об ошибке.
- Если функция SHGetPathFromIDList вернула ненулевой результат, то выводим путь к файлу.
- Если функция SHBrowseForFolder вернула ненулевой результат, то выводим сообщение об ошибке.
- Если функция SHBrowseForFolder вернула ненулевой результат, то выводим путь к файлу.
- Если функция SHBrowseForFolder вернула ненулевой результат, то вызываем функцию system для приостановки выполнения программы до нажатия клавиши.
- Возвращаем 0 в качестве результата выполнения функции main.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д