Открытие файла

Эта статья описывает типовой код, показывающий диалоговое окно Открыть (Open), в котором пользователь может задать диск, каталог и имя открываемого файла. Типовой код сначала инициализирует структуру OPENFILENAME, а затем вызывает функцию GetOpenFileName, чтобы показать диалоговое окно.

В этом примере член lpstrFilter указывает на буфер, который устанавливает два фильтра имен файлов, чтобы пользователь мог выбрать ограничения в отображении имен файлов. Буфер содержит массив строк, оканчивающийся двойным нулем, в котором каждая пара строк определяет фильтр. Член nFilterIndex устанавливает, какой шаблон использовать первым, когда создается диалоговое окно.

Этот пример устанавливает флажки OFN_PATHMUSTEXIST и OFN_FILEMUSTEXIST в члене Flags. Эти флажки заставляют диалоговое окно проверять, перед возвратом значения, какой путь и имя файла, установленные пользователем, фактически существуют.

Функция GetOpenFileName возвращает значение ИСТИНА (TRUE), если пользователь щелкает по кнопке ОК и устанавливает путь и имя существующего файла. В этом случае, буфер, указываемый членом структуры lpstrFile , содержит путь и имя файла. Типовой код использует эту информацию при вызове функции  для открытия файла.

Хотя в этом примере не устанавливается флажок OFN_EXPLORER, в нем все-таки по умолчанию показывается диалоговое окно Открыть (Open) в стиле Проводника. Однако, если вы хотите установить фильтр (hook) - процедуру или пользовательский шаблон и хотите иметь пользовательский интерфейс в стиле Проводника, вы должны установить флажок OFN_EXPLORER.

Обратите внимание! на то, что в языке программирования C  символьная строка, заключенная двойными кавычками - символ конца строки ('0').

Пример

OPENFILENAME ofn;       // структура станд. блока диалога
char szFile[260];       // буфер для имени файла
HWND hwnd;              // окно-владелец
HANDLE hf;              // дескриптор файла

// Инициализация структуры OPENFILENAME
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

// Показываем на экране диалоговое окно Открыть (Open).

if (GetOpenFileName(&ofn)==TRUE) 
    hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
        0, (LPSECURITY_ATTRIBUTES) NULL,
        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
        (HANDLE) NULL);

 

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz