Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Текущие диск и каталог для процесса




Текущий каталог текущего диска — то место, где Windows-функции ищут файлы и подкаталоги, если полные пути в соответствующих параметрах не указаны. Например, если поток в процессе вызывает функцию CreateFile, чтобы открыть какой-нибудь файл, а полный путь не задан, система просматривает список файлов в текущем каталоге текущего диска. Этот каталог отслеживается самой системой, и, поскольку такая информация относится ко всему процессу, смена текущего диска или каталога одним из потоков распространяется и на остальные потоки в данном процессе.

Поток может получать и устанавливать текущие каталог и диск для процесса с помощью двух функций:

DWORD GetCuгrentDirectory(DWORD cchCurDir, PTSTR pszCurDir);

BOOL SetCurrentDirectory(PCTSTR pszCurDir);

 

Если предоставленный буфер недостаточно велик, GetCurrentDirectory возвращает размер буфера (в символах), необходимого для хранения пути к этой папке (включая концевой символ «\0»), ничего не копируя в предоставленный буфер; в этом случае его можно установить в NULL. Если вызов успешен, функция возвращает длину строки (в символах, без учета концевого символа «/0»).

Замечание. В WinDef.h установлено значение константы МАХ_РАТН=260 – это максимальная длина имени файла или каталога. Таким образом, при вызове GetCurrentDirectory можно смело передавать буфер, содержащий МАХ_РАТН элементов типа TCHAR.

Для смены текущего каталога вместо Windows-функции SetCurrentDirectory можно использовать функцию _chdir из библиотеки С. Внутренне она тоже обращается к SetCurrentDirectory, но, кроме того, способна добавлять или модифицировать переменные окружения, что позволяет запоминать в программе текущие каталоги на различных дисках.

Процесс может узнать, какие каталоги являются текущими, вызвав функцию GetFullPathName:

DWORD GetFullPathName( PCTSTR pszFile, DWORD cchPath, PTSTR pszPath,

                                          PTSTR *ppszFilePart);

 

Например, чтобы получить текущий каталог на диске С, функцию вызывают так:

TCHAR szCurDir[MAX_PATH];

DWORD cchLength = GetFullPathName(TEXT(“C:"), MAX_PATH, szCurDir, NULL);

wcout<<szCurDir; // C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE

 

 

Заметьте, что если проект собран с набором символов Unicode, то и строка szCurDir будет содержать символы Unicode.

Определение версии системы

Весьма часто приложению требуется определять, в какой версии Windows оно выполняется. Причин тому несколько. Например, программа может использовать функцию CreateFileTransacted из Windows API, но в полной мере эта функция реализована лишь в Windows Vista.

Функция GetVersion есть в API всех версий Windows:

DWORD GetVersion();

 

С этой простой функцией связана целая история. Сначала ее разработали для 16-разрядной Windows, и она должна была в старшем слове возвращать номер версии MS-DOS, а в младшем — номер версии Windows. Соответственно в каждом слове старший байт сообщал основной номер версии, младший — дополнительный номер версии. Увы, программист, писавший ее код, слегка ошибся, и получилось так, что номера версии Windows поменялись местами: в старший байт попадал дополнительный номер, а в младший — основной. Поскольку многие программисты уже начали пользоваться этой функцией, Майкрософт пришлось оставить все, как есть, и изменить документацию с учетом ошибки.

Из-за всей этой неразберихи вокруг GetVersion в Windows API включили новую функцию:

BOOL GetVersionEx(POSVERSIONINFOEX pVersionInformation);

 

Перед обращением к GetVersionEx программа должна создать структуру OSVERSIONINFOEX, и передать ее адрес этой функции. Эта структура появилась в Windows 2000. В остальных версиях Windows используется структура OSVERSIONINFO, в которой нет последних пяти элементов, присутствующих в структуре OSVERSIONINFOEX.










Последнее изменение этой страницы: 2018-04-12; просмотров: 525.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...