Ввод/вывод файлов. Создание и открытие файлов, страница 6

Синтаксис

HANDLE GetStdHandle( DWORD dwDevice )

Параметры

dwDevice

DWORD. Устройство, для которого должен быть возвращен дескриптор. Этот параметр может иметь одно из значений, приведенных в табл. 17.19.

Таблица 17.19. Значения параметра dwDevice функции GetStdHandle

Значение

Описание

STD_INPUT_HANDLE

Дескриптор стандартного устройства ввода информации

STD_OUTPUT_HANDLE

Дескриптор стандартного устройства вывода информации

STD ERROR_HANDLE

Дескриптор стандартного устройства вывода сообщений об ошибках

Возвращаемое значение

HANDLE. В случае успешного выполнения — дескриптор указанного устройства; в ином случае — INVALID_HANDLE_VALUE.

Включаемыйфайл

winbase.h

См. также

SetStdHandle

Пример

В следующем примере при запуске приложения с помощью функции AHocConsole создается окно консоли (рис. 17.3). Когда пользователь выбирает пункт меню Test!, в окне консоли отображается строка "This string is sent to the console".

См.     \local-sources\chapl7\17-13.txt

Рисунок 17.3. Пример применения функции GetStdHandle

GetTempFileName                        * Windows 98   + Windows 2000

Описание

Функция GetTempFileName создает временное имя файла в следующем формате: path\preuuuu.tmp. В табл. 17.20 описаны компоненты имени этого файла. При останове системы Windows временные файлы, имена которых были созданы с помощью этой функции, автоматически не удаляются.

Таблица 1 7.20. Компоненты имени файла GetTempFileName

Компонент

Описание

path

Путь, указанный параметром IpszPath

рте

Первые три символа строки /pszPref/x

UUUU

Шестнадцатиричное значение параметра uUn/que или сгенерированное системой уникальное число

Синтаксис

UINT GetTempFileName( LPCTSTR IpszPath, LPCTSTR IpszPrefix, UINT u Unique, LPTSTR IpszTempFile )

Параметры

IpszPath

LPCTSTR. Указатель на строку с нулевым символом в конце, содержащую путь, по которому функция создает временное имя файла. В приложениях в качестве этого параметра обычно указывают точку (.) или результат вызова функции GetTempPath. Если этот параметр равен NULL, функция ;не достигает успеха.

IpszPrefix и Unique

LPCTSTR. Указатель на строку с нулевым символом в конце, которая используется как префикс имени временного файла. UINT. Целое число без знака, используемое при создании имени временного файла. Если этот параметр отличен от нуля, он присоединяется к имени временного файла. Если этот параметр равен 0, система Windows для создания числа, присоединяемого к имени файла, использует текущее системное время.

IpszTempFile

LPTSTR. Указатель на буфер, в котором размещается имя временного файла с нулевым символом в конце. Для размещения значения пути этот буфер должен иметь длину (в байтах) не менее МАХ_РАТН.

Возвращаемое значение

UINT. В случае успешного выполнения — уникальное числовое значенй используемое в имени временного файла. Если параметр и Unique отличе от нуля, возвращаемое значение содержит то же число. Если функция t достигает успеха, возвращаемое значение — 0.

Включаемый файл

winbase.h

См. также

CreateFile, GetTempPath

Пример

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

См .    \ local -source» \ chapl 7\17-14.txt

GetTempPath                            Windows 98   • Windows 2000

Описание

Функция GetTempPath позволяет определить путь к каталогу, предназначенному для временных файлов. Для временных файлов должен использоваться именно этот путь.

Синтаксис

DWORD GetTempPath( DWORD dwBuffer, LPTSTR IpszTempPath )

Параметры

dwBuffer

DWORD. Размер буфера   IpszTempPath в байтах (ANSI) или символах (Unicode).

IpszTempPath

LPTSTR. Указатель на строковый буфер, который принимает строку с нулевым символом в конце, обозначающую временный путь к файлу.

Возвращаемое значение

DWORD. В случае успешного выполнения — длина в байтах (ANSI) или символах (Unicode) строки, скопированной в буфер IpszTempPath. Длина не включает завершающий нулевой символ. Если функция не достигает успеха, возвращаемое значение — 0. Если возвращаемое значение превышает значение dwBuffer, функция возвращает размер (в байтах или символах) буфера, необходимого для размещения строки с обозначением пути.

Включаемый файл

winbase.h

См. также

GetTempFileName

Пример

См. пример для функции GetTempFileName.

LocalFileTimeToFileTime                 Windows 98   •  Windows 2000

Описание

Функция LocalFileTimeToFileTime преобразует отметку местного времени в отметку времени, соответствующую значению универсального скоординированного времени (UTC).

Синтаксис

BOOL LocalFileTimeToFileTime( CONST FILETIME* IpftLocal, LPFILETIME Ipft )

Параметры

IpftLocal

CONST FILETIME*. Указатель на структуру  FILETIME, содержащую отметку местного времени, которая должна быть преобразована в отметку времени, соответствующую UTC. Определение структуры FILETIME приведено в описании функции CompareFileTime.

Ipft

LPFILETIME. Указатель на структуру FILETIME, которая должна принять преобразованную отметку времени, соответствующую UTC. Этот параметр не может быть равен параметру IpftLocal Определение структуры FILETIME приведено в описании функции CompareFileTime.

Возвращаемое значение

BOOL. В случае успешного выполнения — TRUE; в ином случае — FALSE.

Включаемыйфайл

winbase.h

См. также

FileTimeToLocalFileTime

Пример

См. пример для функции DosDateTimeToFileTime.

LockFile                                   •  Windows 98   • Windows 2000

Описание

Функция LockFile блокирует участок в открытом файле и предоставляет блокирующему процессу монопольный доступ к указанному участку, отказывая всем другим процессам в доступе к этому участку для чтения и для записи. Блокировки не могут перекрывать существующие заблокированные участки файла. Для разблокирования участка применяется функция UnlockFile.

Синтаксис

BOOL LockFile( HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh, DWORD dwLockLow, DWORD dwLockffigh )

Параметры

hFile

HANDLE. Дескриптор файла, в котором должна быть заблокирована область. Дескриптор файла должен быть создан с правами доступа к файлу либо GENERIC_READ, либо GENERIC_WRITE (либо с теми и иными).

dwFile Offset Low

DWORD. Младшие 32 бита начального байтового смещения в файле, с которого должна начаться блокировка.

dwFileOffsetHigh

DWORD. Старшие 32 бита начального байтового смещения в файле, с которого должна начаться блокировка.

dwLockLow

DWORD. Младшие 32 бита значения длины блокируемой области в байтах.

dwLockffigh

DWORD. Старшие 32 бита значения длины блокируемой области в байтах.

Возвращаемое значение

BOOL. В случае успешного выполнения — TRUE; в ином случае — FALSE

Включаемый файл

winbase.h

См. также

CreateFile, UnlockFile

Пример

В следующем примере показана функция, которая обновляет запись Е файле с использованием блокировки файла. В параметре dwRecord передается номер записи и вычисляется смещение в файле, исходя из размера структуры RECORD (это — структура, зависящая от приложения, которая представляет запись в файле). Участок файла, в котором находится запись, блокируется, и запись обновляется. Если параметр bFlush установлен в значение TRUE, буферы файла очищаются с помощью функции FlushFileBuffers. Затем запись разблокируется и функция возвращает информацию об успешном выполнении.

См.     \local-sources\chapl7\17-15. txt

LockFileEx                                 Windows 98   + Windows 2000

Описание

Функция LockFileEx блокирует ряд байтов в открытом файле для совместного или монопольного доступа. Блокировка ряда байтов в файле предоставляет приложению разделяемый или монопольный доступ к этим байтам в файле. При создании процесса блокировки файла не наследуются новым процессом. Блокировка части файла для монопольного доступа не позволяет другим процессам получить доступ к этой части файла для чтения и записи. Блокировка части файла для совместного доступа исключает для других процессов возможность получить доступ к этой части файла для записи.

Синтаксис

BOOL LockFileEx( HANDLE fiFtle, DWORD dwFlags, DWORD dwReserved, DWORD dwNumberOfBytesToLockLow, DWORD dwNumberOfBytesToLockffigh, LPOVERLAPPED IpOverlapped)

Параметры

hFile

HANDLE. Открытый дескриптор файла, в котором ряд байтов должен быть заблокирован для разделяемого или монопольного доступа. Дескриптор должен быть создан с правами доступа к файлу GENERIC READ или GENERIC_WRITE.

dwFlags

DWORD. Определяет способ блокировки файла. Этот параметр может иметь одно или несколько значений, перечисленных в табл. 17.21.

Таблица 17.21. Значения параметра dwFlags функции LockFileEx

Значение

Описание

LOCKFILE_EXCLUSIVE_LOCK

Функция запрашивает монопольную блокировку. По умолчанию функция запрашивает разделяемую блокировку.

LOCKFILE_FAILJMMEDIATELY

Функция немедленно выполняет возврат, если не может приобрести затребованную блокировку. По умолчанию функция переходит в состояние ожидания.

dwReserved

DWORD. Зарезервированное значение; должно быть установлено равным 0.

dwNumberOfBytesToLockLow DWORD. Младшие 32 бита значения длины блокируемой области, в байтах.

dwNumberOfBytesToLockHigh DWORD. Старшие 32 бита значения длины блокируемой области, в байтах.

IpOverlapped

LPOVERLAPPED. Указатель на структуру OVERLAPPED, используемую функцией в запросе блокировки. Эта обязательная структура содержит смещение   начала   области   блокировки   в   файле.   Определение   структуры OVERLAPPED приведено в описании функции ReadFile далее в этой главе.

Возвращаемое значение

BOOL. В случае успешного выполнения — TRUE; в ином случае — FALSE.

Включаемыйфайл

winbase.h

См. также

LockFile, UnlockFileEx

Пример

Следующий пример аналогичен примеру, приведенному при описании функции LockFile, за исключением того, что в нем для блокирования участка файла используется функция LockFileEx, а для разблокирования того же участка после обновления — функция UnlockFileEx.

См.     \local-sources\chapl7\17-16. txt

MapViewOfFile                           + Windows 98   ф Windows 2000

Описание

Функция MapViewOfFile отображает представление файла в адресное пространство вызывающего процесса. Процесс может продублировать дескриптор объекта отображения файла для другого процесса с использованием функции DuplicateHandle или другой процесс может открыть объект   отображения   файла   по   имени   с   использованием   функции OpenFileMapping.

Синтаксис

LPVOID MapViewOfFile( HANDLE   hMapObject, DWORD   dwAccess, DWORD dwOffsetHigh, DWORD dwOffsetLow, DWORD dwMap )

Параметры

hMapObject

HANDLE. Открытый дескриптор объекта отображения файла. Это — дескриптор, возвращаемый функциями CreateFileMapping и OpenFileMapping.

dwAccess

DWORD. Тип доступа к представлению файла. Этот параметр может иметь одно из значений, приведенных в табл. 17.22.

Таблица 17.22. Значения параметра dwAccess функции MapViewOfFile

Значение

Описание

HLE_MAP_ALL_ACCESS

To же, что и FILE_MAP_WRITE.

FILE_MAP_COPY

Доступ для копирования после записи.

HLE_MAP_READ

Доступ только для чтения. Параметр hMapOb/ect должен быть создан с правами защиты PAGE_READWRITE или PAGE_READ.

FILE_MAP_WRITE

Доступ для чтения/записи. Параметр hMapObject должен быть создан с правами защиты PAGE_READWRITE .

dwOffsetHigh

DWORD. Старшие 32 бита смещения файла, с которого должно начаться отображение.

dwOffsetLow

DWORD. Младшие 32 бита смещения файла, с которого должно начаться отображение. Смещение должно находиться внутри файла и быть кратным степени детализации распределения. Для получения информации о степени детализации распределения памяти системы применяется функция GetSystemlnfo.

dwMap

DWORD. Число байтов файла, которое должно быть отображено. Если этот параметр установлен равным 0, отображается весь файл.

Возвращаемое значение

LPVOID. В случае успешного выполнения — начальный адрес отображенного представления; в ином случае — NULL.

Включаемый файл

winbase.h

См. также

CreateFileMapping, DuplicateHandle, MapViewOfFileEx, OpenFileMapping, UnMapViewOfFile

Пример

В следующем примере показано, как обеспечить совместный доступ двух процессов к файлу, отображенному в память. При запуске приложения создается файл, отображенный в память. Когда пользователь выбирает пункт меню Test!, отображается представление файла, и данные помещаются в память. Затем в этой программе создается нить и выполняется переход в состояние ожидания момента модификации данных нитью с контролем  по таймеру.   Нить использует данные для  отображения окна сообщения и после закрытия окна сообщения помещает в отображенную память строку "Received". Когда программа в данном примере получает сообщение WMJTIMER, она проверяет, была ли помещена в отображенную память строка "Received". Если это было выполнено, работа нити и таймера прекращается, и пользователь получает сообщение.

См.    \local-sources\chapl7\17-17.txt

MapViewOfFileEx                        Windows 98   • Windows 2000

Описание

Функция MapViewOfFileEx аналогична MapViewOfFile, за исключением того, что вызывающий процесс может указать предполагаемый адрес памяти для отображенного представления. В Windows 2000, если параметр IpvBase указывает базовое смещение, функция выполняется успешно при условии, что указанная область памяти еще не используется вызывающим процессом. В Windows 98 та же область памяти должна быть доступна для всех 32-разрядных процессов. Как правило, предполагаемый адрес используется для указания того, что файл должен быть отображен в один и тот же адрес во многих процессах. Для этого требуется, чтобы данная область адресного пространства была доступна всем участвующим процессам. В области памяти, которая служит для отображения, не должно происходить никакое иное распределение памяти, включая использование функции VirtualAlloc для резервирования памяти.

Синтаксис

LPVOID MapViewOfFileEx( HANDLE hMapObject, DWORD dwAccess, DWORD dwOffsetffigh, DWORD dwOffsetLow, DWORD dwMap, LPVOID IpvBase )

Параметры

hMapObject

HANDLE. Открытый дескриптор объекта отображения файла. Это — дескриптор, возвращаемый функциями CreateFileMapping и OpenFileMapping.

dwAccess

DWORD. Тип доступа к представлению файла. Этот параметр может иметь одно из значений, приведенных в табл. 17.22.

dwOffsetffigh

DWORD. Старшие 32 бита смещения файла, с которого должно начаться отображение.

dwOffsetLow

DWORD. Младшие 32 бита смещения файла, с которого должно начаться отображение. Смещение должно находиться внутри файла и быть кратным степени детализации распределения. Для получения информации о степени детализации распределения памяти системы применяется функция GetSystemlnfo.

divMap

DWORD. Число байтов файла, которое должно быть отображено. Если этот параметр установлен равным 0, отображается весь файл.

IpvBase

LPVOID. Указатель на адрес памяти в адресном пространстве вызывающего процесса, с которого должно начаться отображение. Это значение должно быть кратным степени детализации распределения памяти системы; в ином случае, функция не достигает успеха. Функция завершается аварийно также в том случае, если по указанному адресу нет достаточного объема адресного пространства. Если этот параметр установлен равным NULL, адрес отображения выбирает операционная система, и функция эквивалентна MapViewOfFile.

Возвращаемое значение

LPVOID. В случае успешного выполнения начальный адрес отображенного представления; в ином случае — NULL.

Включаемый файл

winbase.h

См. также

CreateFileMapping, DuplicateHandle, MapViewOfFile, OpenFileMapping, UnmapViewOfFile

Пример

Следующий пример аналогичен приведенному при описании функции MapViewOfFile, за исключением того, что в нем для обеспечения совпадения адреса, используемого для объекта отображения в нити, с адресом, используемым в главном процессе, применяется функция MapView-OfFileEx.

См.    \local-sources\chapl7\17-18.txt

MoveFile                                  Windows 98   • Windows 2000

Описание

Функция MoveFile перемещает (переименовывает) существующий файл или каталог (включая все его подкаталоги) в новое место на томе. Функция MoveFile при перемещении каталога завершается неудачно, если место назначения находится на другом томе. Это связано с тем, что функция MoveFile переименовывает каталог, а не перемещает его физически.

Синтаксис

BOOL MoveF11e( LPCTSTR IpszExisting, LPCTSTR IpszNew )

Параметры

IpszExisting

LPCTSTR. Указатель на строку с нулевым символом в конце, содержащую имя существующего файла или каталога.

IpszNew

LPCTSTR. Указатель на строку с нулевым символом в конце, которая указывает новое имя файла или каталога. Новое имя может указывать на несуществующий объект. Новый файл может находиться в другой файловой системе или на другом диске. Новый каталог должен находиться на том же диске.

Возвращаемое значение

BOOL. В случае успешного выполнения — TRUE; в ином случае — FALSE.