Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Текущие диск и каталог для процесса
Текущий каталог текущего диска — то место, где Windows-функции ищут файлы и подкаталоги, если полные пути в соответствующих параметрах не указаны. Например, если поток в процессе вызывает функцию CreateFile, чтобы открыть какой-нибудь файл, а полный путь не задан, система просматривает список файлов в текущем каталоге текущего диска. Этот каталог отслеживается самой системой, и, поскольку такая информация относится ко всему процессу, смена текущего диска или каталога одним из потоков распространяется и на остальные потоки в данном процессе. Поток может получать и устанавливать текущие каталог и диск для процесса с помощью двух функций: DWORD GetCuгrentDirectory(DWORD cchCurDir, PTSTR pszCurDir); BOOL SetCurrentDirectory(PCTSTR pszCurDir);
Если предоставленный буфер недостаточно велик, GetCurrentDirectory возвращает размер буфера (в символах), необходимого для хранения пути к этой папке (включая концевой символ «\0»), ничего не копируя в предоставленный буфер; в этом случае его можно установить в NULL. Если вызов успешен, функция возвращает длину строки (в символах, без учета концевого символа «/0»).
Для смены текущего каталога вместо 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; просмотров: 569. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |