Имена файлов и каталоги

Информация в этом разделе применяется для диалоговых окон Открыть (Open) и Сохранить как (Save As) как в стиле Проводника, так и в старом стиле.

Перед вызовом функции GetOpenFileName или GetSaveFileName, член lpstrFile структуры OPENFILENAME должен указывать на буфер, который примет имя файла. Член структуры nMaxFile должен определять размер, в TCHARs (символах), буфера lpstrFile. Для функции ANSI это - число байтов, но для функция Unicode , оно является числом символов.

Если пользователь задает имя файла и щелкает по кнопке OK, диалоговое окно копирует выбранный диск, каталог и имя файла в буфер lpstrFile. Функция также устанавливает и члены nFileOffset и nFileExtension со смещением, в TCHARs, от начала буфера для имени файла и для расширения имени файла, соответственно.

Чтобы извлечь только имя файла и расширение, установите член структуры lpstrFileTitle так, чтобы он указывал на буфер, а в члене nMaxFileTitle установите размер, в TCHARs, буфера. Или же, вы можете передать буфер lpstrFile при вызове функции GetFileTitle, чтобы получить отображаемое имя выбранного файла. 

Однако, обратите внимание! на то, что имя файла, которое GetFileTitle возвращает, включает в себя расширение только в том случае, если оно является выбором пользователя среди отображающихся имен файлов.

Диалоговое окно использует текущий каталог вызывающего процесса в качестве начального каталога из которого отображаются файлы и каталоги. Используйте функции GetCurrentDirectory или SetCurrentDirectory, чтобы получить или изменить ваш текущий каталог. Чтобы определить другой начальный каталог без изменения вашего текущего каталога, используйте член структуры lpstrInitialDir, для определения имени каталога. Диалоговое окно автоматически изменит ваш текущий каталог, когда пользователь выберет другой диск или каталог. Чтобы диалоговому окну запретить изменять ваш текущий каталог, установите флажок OFN_NOCHANGEDIR. Этот флажок не мешает пользователю изменять каталоги для поиска файла.

Чтобы определить заданное по умолчанию расширение имени файла, используйте член структуры lpstrDefExt. Если пользователь задает имя файла, которое не имеет расширения, диалоговое окно добавляет свое, заданное по умолчанию, расширение. Если вы определяете заданное по умолчанию расширение, а пользователь определяет имя файла с другим расширением, диалоговое окно устанавливает флажок OFN_EXTENSIONDIFFERENT.

Чтобы дать возможность пользователю выбрать из каталога несколько файлов, установите флажок OFN_ALLOWMULTISELECT. Для совместимости со старыми прикладными программами, заданное по умолчанию диалоговое окно многокомпонентного выбора использует пользовательский интерфейс старого стиля. Чтобы показать на экране диалоговое окно многокомпонентного выбора в стиле Проводника, вы должны к тому же установить и флажок OFN_EXPLORER.

Если пользователь выбирает больше чем один файл, буфер, указанный членом lpstrFile, возвращает путь к текущему каталогу, сопровождаемому именами выбранных файлов. Член структуры nFileOffset - смещение имени первого  файла, а член nFileExtension не используется. Следующая таблица описывает различие между диалоговыми окнами в стиле Проводника и в старом стиле при возврате нескольких имен файлов.

Стиль диалогового окна

Описание

Диалоговое окно в стиле Проводника

Строки каталога и имени файла отделяются значением ПУСТО (NULL), с дополнительным символом NULL после последнего имени файла. Этот формат дает возможность диалоговым окнам в стиле Проводника возвращать длинные имена файлов, которые включают пробелы.

Диалоговое окно старого стиля

Строки каталога и имени файла отделяются пробелами. Для имен файла с пробелами, функция использует короткие имена файлов.

Вы можете использовать функцию FindFirstFile, чтобы делать преобразования между длинными и короткими именами файлов.

Если Вы устанавливаете флажок OFN_ALLOWMULTISELECT, а пользователь выбирает только один файл, символьная строка lpstrFile не имеет разделителя между путем и именем файла.

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

Hosted by uCoz