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

Рисунок 17.4а. Структура каталога перед выполнением функции ЛЛэУвГПеРисунок 17.4Ь. Структура каталога послевыполнения функций Movefile

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

winbase.h

См. также

CopyFile, GetLastError

Пример

В следующем примере показано, как использовать функцию MoveFile для перемещения папок (каталогов). Структура каталога вначале установлена так, как показано на рис. 17.4(а). Когда пользователь выбирает пункт меню Test!, папка "Folded " перемещается под папку "Folder2", как показано на рис. 17.4(Ь).

LRESULT CALLBACK WndProc (  

HWND hWnd,   UINT uMsg,  WPARAM wParam,   LPARAM IParam ) {

switch (   uMsg )                                                                                                                                                                        case WM_COMMAND   : switch (   LOWORD(  wParam )    ) {                                                                                       -case IDM TEST  : MoveFile ("E: \\Book\\A Folder \\Folderl" , "E:\\Book\\A Folder \\Folder2 \\Folderl"   ) ; break;

MoveFileEx                               Windows 98   • Windows 2000

Описание

Функция MoveFileEx аналогична MoveFile, за исключением того, что позволяет применить дополнительные опции перемещения, например отложить перемещение до перезагрузки компьютера. Функция MoveFileEx позволяет также удалять файлы, используемые системой, при перезагрузке компьютера.

Синтаксис

BOOL MoveFileEx( LPCTSTR IpExistingFileName, LPCTSTR IpNewFileName, DWORD dw Flags )

Параметры IpExistingFileName

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

IpNewFileName

LPCTSTR. Указатель на строку с нулевым символом в конце, которая указывает новое имя для параметра IpExistingFileName. Файл может перемещаться в другую файловую систему или на другой диск. Каталог может перемещаться только в пределах одного диска. В Windows 2000, если параметр dwFlags содержит значение MOVEFILE_DELAY_UNTIL_REBOOT, параметр IpNewFileName может быть равен NULL. В этом случае функция MoveFileEx регистрирует файл IpExistingFileName для удаления после перезагрузки системы.

dwFlags

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

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

Значение

Описание

MOVEFILE_COPY_ALLOWED

Если файл должен быть перемещен на другой том, функция моделирует перемещение с использованием функций CopyFile и DeleteFile. Этот флажок нельзя объединять с флажком MOVEFILE_DELAY_UNTIL_REBOOT .

MOVEFILE_DELAY_UNTIL_REBOOT

Файл фактически не перемещается до перезагрузки операционной системы. Система перемещает файл сразу после выполнения команды AUTOCHK, но до создания каких-либо файлов подкачки.

MOVEFILE_REPLACE_EXISTING

Если файл с именем, указанным параметром /pNewFi/eName, уже существует, функция заменяет его файлом, указанным параметром /pEx/sf/ngFi/eName.

MOVEFILE_WRITE_THROUGH

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

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

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

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

winbase.h

См. также

MoveFile

Пример

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

LRESULT CALLBACK WndProc {  HWND hWnd,  UINT uMsg,  WPARAM wParam,   LPARAM IParam )

{ switch (   uMsg )

{ case ИМ COMMAND   :

switch (LOWORD( wParam )    )

{ case IDM_TEST   :

MoveFileEx("E: \\Book\\Chapterl .doc" ,    "D: \\Temp \\Chapterl .doc" , MOVEFILE_COPY_ALLOWED   |  MOVEFILE_WRITE_THROOGH  ) ; break ;

OpenFileMapping                        Windows 98   • Windows 2000

Описание

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

Синтаксис

HANDLE OpenFiIeMapping( DWORD dwDesiredAccess, BOOL blnheritHandle, LPCTSTR IpName )

Параметры

dwDesiredAccess

DWORD. Тип доступа к объекту отображения файла. Этот параметр может иметь одно из значений, приведенных в табл. 17.24; он проверяется по всем дескрипторам защиты целевого объекта отображения файла.

Таблица 17.24. Значения параметра dwDesiredAccess функции OpenFileMapping

Значение

Описание

FtE_MAP_ALL_ACCESS

To же, что и FILE_MAP_WRITE.

FILE_MAP_COPY

Доступ для копирования после записи. Файл назначения, отображающий объект, должен быть создан с правами защиты PAGE WRITECOPY.

FILE_MAP_READ

Доступ только для чтения. Файл назначения, отображающий объект, должен быть создан с правами защиты PAGE READWRITE или PAGE READ.

FILE_MAP_WRITE

Доступ для чтения/записи. Файл назначения, отображающий объект, должен быть создан с правами защиты PAGE_READ WRITE.

blnheritHandle

BOOL. Определяет, должен ли возвращенный дескриптор быть унаследован новым процессом при его создании. Устанавливается равным TRUE для указания того, что новый процесс наследует дескриптор.

IpName

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

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

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

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

winbase.h

См. также

MapViewOfFile

Пример

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

ReadFile                                 Windows 98   • Windows 2000

Описание

Функция ReadFile считывает данные из файла, начиная с позиции, обозначенной указателем файла. После считывания данных указатель файла сдвигается на число считанных байтов, при условии, что дескриптор файла не был создан с атрибутом перекрывающегося ввода/вывода. Если дескриптор файла был создан для перекрывающегося ввода/вывода, приложение должно с помощью функции SetFilePointer корректировать положение указателя файла после считывания.

Синтаксис

BOOL ReadFile( HANDLE hFile, LPVOID IpBuffer, DWORD dwNumberOfBytesToRead, LPDWORD IpdwNumberOfBytesRead, LPOVERLAPPED IpOverlapped)

Параметры

hFile

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

IpBuffer

LPVOID. Указатель на буфер, который принимает данные, считанные из файла.

dwNumberOfBytesToRead

DWORD. Число байтов, которое должно быть считано из файла.

IpdwNumberOfBytesRead

LPDWORD. Указатель на переменную DWORD, которая принимает число считанных байтов. Функция ReadFile устанавливает это значение равным 0 перед выполнением любых действий или перед проверкой наличия ошибок. Если этот параметр равен 0, когда функция ReadFile возвратила значение TRUE после чтения данных из именованного канала, это значит, что на другом конце канала, работающего в режиме передачи сообщений, функция WriteFile была вызвана с параметром dwNumberOfBytesToWrite, установленным равным 0.

IpOverlapped

LPOVERLAPPED. Указатель на структуру OVERLAPPED. Эта структура требуется, если файл, обозначенный дескриптором hFile, был создан с флажком FILE_FLAG_OVERLAPPED. Определение структуры OVERLAPPED приведено ниже. Если дескриптор hFile был создан с флажком FILE_FLAG_OVERLAPPED и параметр IpOverlapped отличен от NULL, чтение начинается со смешения, указанного в структуре OVERLAPPED, и функция ReadFile может выполнить возврат прежде, чем закончится операция чтения. В этом случае функция ReadFile возвращает значение FALSE, а функция GetLastError возвращает значение ERROR_IO_PENDING. Вызывающий процесс может продолжать выполнение, пока заканчивается чтение. Событие, указанное в структуре OVERLAPPED, после завершения операции чтения устанавливается в сигнальное состояние. Если дескриптор hFile не был создан с флажком FILE_FLAG_OVERLAPPED и параметр IpOverlapped отличен от NULL, операция чтения начинается со смещения, указанного в структуре OVERLAPPED. Функция ReadFile не выполняет возврат до тех пор, пока чтение не будет закончено.

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

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

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

winbase.h

См. также

CreateFile, GetLastError, GetOverLappedResult, ReadFileEx, WriteFile

Определение OVERLAPPED

typedef struct    OVERLAPPED {

ULONG_PTR    Internal ;

ULONG_PTR    InternalHigh;

DWORD    Offset; DWORD    OffsetHigh;

HANDLE hEvent; }   OVERLAPPED;

Члены

Internal      .

ULONG_PTR. Зарезервирован для использования в операционной системе.

InternalHigh

ULONG_PTR. Зарезервирован для использования в операционной системе.

Offset

DWORD. Младшие 32 бита позиции файла, с которой должно начаться чтение. Вызывающий процесс устанавливает значение этого члена перед вызовом функции ReadFile или WriteFile. Этот член должен быть установлен равным 0 при чтении из именованных каналов и устройств связи или записи в них.

OffsetHigh

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

hEvent

HANDLE. Дескриптор события, которое должно быть установлено в сигнальное состояние после окончания передачи информации. Вызывающий процесс устанавливает  этот член  перед  вызовом  функции   ReadFile, WriteFile, ConnectNamedPipe или TransactNamedPipe.

Пример

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

ReadFileEx                               Windows 98   • Windows 2000 "

Описание

Функция ReadFileEx обеспечивает асинхронное чтение данных из файла. Она предназначена исключительно для асинхронных операций. Если для приложения требуется синхронное чтение, следует применять функцию ReadFile, которая предназначена и для синхронных, и для асинхронных операций. Асинхронное чтение позволяет выполнять в приложении другую обработку во время чтения из файла. После завершения чтения вызывается заданная функция обратного вызова.

Синтаксис

BOOL ReadFileEx( HANDLE hFile, LPVOID IpBuffer, DWORD dwNumberOfBytesToRead, LPOVERLAPPED IpOverlapped, LPOVERIAPPED_COMPLETION_ROUTINE Ip Completion Routine )

Параметры

hFile

HANDLE. Открытый дескриптор файла, в котором выполняется чтение. Дескриптор файла создается с флажком  FILE_FLAG_OVERLAPPED и должен предусматривать права доступа к файлу   GENERIC_READ. В Windows 2000 в качестве этого параметра может применяться любой дескриптор, открытый с флажком   FILE_FLAG_OVERLAPPED функцией CreateFile, или дескриптор сокета, возвращенный функциями socket или accept. В Windows 98 в качестве этого параметра может применяться ресурс связи, почтовый слот, дескриптор именованного канала, открытый функцией CreateFile с флажком FILE_FLAG_OVERLAPPED, или дескриптор сокета. Система Windows 98 не поддерживает асинхронные операции с файлами на диске.

IpBuffer

LPVOID. Указатель на буфер, который принимает данные, считанные из файла. Этот буфер должен остаться действительным на протяжении всей операции чтения, и приложение не должно его использовать, пока чтение не будет закончено.

dwNumberOfBytesToRead

DWORD. Число байтов, которые должны быть считаны из файла.

IpOverlapped

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

IpCompletionRoutine

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

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

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

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

winbase.h

См. также

WriteFileEx, ReadFile

Синтаксис обратного вызова

VOID WINAPI FileIOCompletionRoutine( DWORD dwErrorCode,

DWORD dwNumberOfBytesTransferred, LPOVERLAPPED IpOverlapped )

Параметры обратного вызова

dwErrorCode

DWORD. Состояние завершения ввода/вывода. Если этот параметр установлен равным 0, операция ввода/вывода была выполнена успешно. Если он равен ERROR_HANDLE_EOF, имела место попытка чтения после достижения конца файла.

dwNumberOfBytesTransferred

DWORD. Число переданных байтов. В случае ошибки этот параметр равен 0.

IpOverlapped

LPOVERLAPPED. Указатель на структуру OVERLAPPED, переданную в качестве параметра функции асинхронного ввода/вывода. Член hEvent не используется системой Windows, поэтому в вызывающем приложении этот член можно использовать для передачи информации процедуре завершения. После обращения к функции обратного вызова структура OVERLAPPED больше не нужна. Функция обратного вызова может освободить память, занимаемую этой структурой.

RemoveDirectory                         Windows 98   + Windows 2000

Описание

Функция RemoveDirectory удаляет указанный пустой каталог.

Синтаксис

BOOL RemoveDirectory( LPCTSTR IpszDir )

Параметры

IpszDir

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

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

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

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

winbase.h

См. также

CreateDirectory

Пример

В следующем примере удаляется каталог "Child Folder", когда пользователь выбирает пункт меню Test!.

LRESULT CALLBACK WndProc(  HWND hWnd,  UINT uMsg,  WPARAM wParam,   LPARAM 1Par am )

{ switch (   uMsg )

{ case WM_COMMAND:

switch (   LOWORD( wParam )    )

{ case IDM TEST  :

RemoveDirectory ( "E: \\Book\\A FolderN \Folder2\\Folderl\\Child Folder");

break;

SearchPath                              Windows 98   • Windows 2000

Описание

Функция SearchPath выполняет поиск указанного файла в заданном пути или поиск с учетом следующего порядка поиска: Каталог, из которого было загружено приложение Текущий каталог Системный каталог Windows Каталог Windows Каталоги, перечисленные в системной переменной PATH

Синтаксис

DWORD SearchPath( LPCTSTR IpszPath, LPCTSTR IpszFile, LPCTStR IpszExtension, DWORD dwReturnBuffer, LPTSTR IpszReturnBuffer, LPTSTR* plpszHlePart )

Параметры

IpszPatk

LPCTSTR Указатель на строку с нулевым символом в конце, которая содержит путь доступа, применяемый для поиска файла. Если этот параметр установлен равным NULL, функция выполняет поиск по каталогам в порядке, описанном выше.

Ipszfile

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

IpszExtaHen

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

dwRelurnBuffer

DWORD. Длина в байтах (ANSI) или символах (Unicode) буфера, который принимает допустимое значение пути доступа и имени файла.

IpszReturnBuffer

LPTSTR Указатель на буфер для записи найденного допустимого значения пути доступа и имени файла.

plpszfilePart

LPTSTR*. Указатель на переменную, которая принимает адрес (внутри буфера IpszReturnBuffer) последнего компонента допустимого значения пути доступа и имени файла. Этим адресом является адрес символа, который непосредственно следует за последним обратным слэшем (\), в буфере, содержащем значение пути доступа.

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

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

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

winbasc.h

См. также

FindFirstFile, FindNextFile

Пример

В следующем примере показано, как использовать функцию SearchPath для поиска файла CALC.EXE. Если файл найден, путь к нему отображается в окне сообщения.

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

SetEndOfFile                             Windows 98   • Windows 2000

Описание

Функция SetEndOfFile перемещает позицию конца файла (EOF — end-of-file) для указанного файла в текущую позицию указателя файла.

Синтаксис

BOOL SetEndOfFile( HANDLE hFile )

Параметры

hfile

HANDLE. Дескриптор файла, в котором необходимо переместить позицию конца файла EOF. Дескриптор файла должен быть создан с правами доступа к файлу GENERIC_WRITE.

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

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

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

winbase.h

См. также

CreateFile

Пример

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

SetFileApisToANSI                       Windows 98   •  Windows 2000

Описание

Функция SetFileApisToANSI вынуждает набор файловых функций Win32 использовать кодовую страницу набора символов ANSI. Эта функция применяется для 8-разрядных операций ввода и вывода на консоль. Список функций, на которые воздействует данная функция, приведен в описании функции AreFileApisANSI ранее в этой главе.

Синтаксис

VOID SetFileApisToANSI( VOID )

Параметры

Эта функция не имеет параметров.

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

winbase.h

См. также

SetFileApisToOEM, AreFileApisANSI

Пример

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

SetFileApisToOEM                       Windows 98   • Windows 2000

Описание

Функция SetFileApisToOEM вынуждает набор файловых функций Win32 использовать кодовую страницу набора символов OEM. Эта функция применяется для 8-разрядных операций ввода и вывода на консоль. Список функций, на которые воздействует данная функция, приведен в описании функции AreFileApisANSI ранее в этой главе.

Синтаксис

VOID SetFileApisToOEM( VOID )

Параметры

Эта функция не имеет параметров.

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

winbase.h

См. также

SetFileApisToANSI, AreFileApisANSI

Пример

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

SetFileAttributes                          Windows 98   •  Windows 2000

Описание

Функция SetFileAttributes устанавливает атрибуты файла.

Синтаксис

BOOL SetFileAttributes( LPCTSTR IpFileName, DWORD dwFileAttributes )

Параметры

IpfileName

LPCTSTR. Указатель на строку с нулевым символом в конце, содержащую путь доступа к файлу, для которого должны быть установлены атрибуты. Длина строки не должна превышать МАХ_РАТН символов. В приложении Windows 2000 можно обойти это ограничение, вызвав широкую (W) версию функции SetFileAttributes и поместив в начале строки символы "\\?\" или "\\7\UNC\" для отмены интерпретации пути доступа.

dwFikAttribHtes

DWORD. Атрибуты, которые должны быть установлены для файла. Этот параметр может представлять собой комбинацию значений, приведенных в табл. 17.25, которые объединены с помощью двоичного оператора OR (|). Однако другие атрибуты отменяют значение FILE_ATTRIBUTE_NORMAL

Таблица 17.25. Значения параметра dwFileAttributes функции SetFileAttributes

Значение

Описание

FILE_ATTRIBUTE_ARCHIVE

Файл является архивным.

FILE_ATTRIBUTE_DIRECTORY

Файл представляет собой каталог.

FILE_ATTRIBUTE_HIDDEN

Файл является скрытым.

FILE_ATTRIBUTE_NORMAL

Файл не имеет других атрибутов. Это значение допустимо, только если используется отдельно.

FILE_ATTRIBUTE_NOT_CONTENTJNDEXED

Файл не должен быть проиндексирован службой индексации информационного наполнения.

FILE_ATTRIBUTE_OFFLINE

Данные файла не являются непосредственно доступными. Этот атрибут указывает, что данные файла физически перемещены на автономное запоминающее устройство.

FILE_ATTRIBUTE_READONLY

Файл предназначен только для чтения.

FILE_ATTRIBUTE_SYSTEM

Файл является частью операционной системы или используется ею монопольно.

FILE_ATTRIBUTE_TEMPORARY

Файл используется для временного хранения данных.

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

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

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

winbase.h

См. также

GetFileAttributes

Пример

В следующем примере показано, как проверить, установлен ли для файла FILE.DAT атрибут FILE_ATTRIBUTE_READONLY. Если - да, атрибуты очищаются с помощью функции SetFileAttributes перед удалением файла.

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

SetFilePointer                           + Windows 98   * Windows 2000

Описание

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

Синтаксис

DWORD SetFilePointer( HANDLE hFile, LONG IDistanceToMove, PLONG IpDistanceToMoveHigh, DWORD dwMoveMethod )

Параметры

hFile

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

IDistonceToMove

LONG. Число байтов, на которое должен быть перемещен указатель файла. При положительном значении указатель перемещается в файле в прямом направлении, а при отрицательном — в обратном.

IpDistanceToMoveHigh

PLONG. Указатель на старшие 32 бита 64-разрядного значения расстояния, на которое должно быть выполнено перемещение. Если значение этого параметра равно NULL, функция может применяться только с файлами, которые имеют максимальный размер 23' — 2. Если этот параметр указан, максимальный размер файла может составлять 2м — 2. Этот параметр принимает также старшее слово нового значения указателя файла.

dwMoveMethod

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

Таблица 17.26. Значения параметра dwMoveMethod функции SetFilePointer

Значение

Описание

FILE_BEGIN

Отправная точка — 0, или начало файла.

FILE_CURRENT

Отправная точка — текущее значение указателя файла.

FILE_END

Отправная точка — текущая позиция конца файла.

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

DWORD. В случае успешного выполнения — младшие 32 бита нового указателя файла; если параметр IpDistanceToMoveHigh отличен от NULL;*; он принимает старшие 32 бита значения нового указателя файла.Если функция не достигает успеха и параметр IpDistanceToMoveHigh равен NULL, возвращаемое значение — OxFFFFFFFF. Если функция He-достигает успеха и параметр IpDistanceToMoveHigh отличен от NULL, возвращаемое значение — OxFFFFFFFF, а функция GetLastError возвращает значение, отличное от NO_ERROR.

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

winbase.h

См. также

GetLastError, ReadFile, ReadFileEx, WriteFile, WriteFUeEx

Пример

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

SetFileTime                              Windows 98   • Windows 2000

Описание

Функция SetFileTime устанавливает дату и время создания, последнего обращения или последнего изменения файла.

Синтаксис

BOOL SetFileTime( HANDLE hFile, CONST FILETIME* IpftCreation, CONST FILETIME* IpftLasi 'Access, CONST FILETIME* IpftLastWrite )

Параметры

hfile

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

IpftCreation

CONST FILETIME*. Указатель на структуру FILETIME, которая содержит дату и время создания файла. Этот параметр может быть равен NULL, если приложение не должно устанавливать эти атрибуты. Определение  структуры    FILETIME приведено   в   описании   функции Compare FileTime.

Ipft Last Access

CONST FILETIME*. Указатель на структуру FILETIME, которая содержит дату и время последнего доступа к файлу. Этот параметр может быть равен NULL, если приложение не должно устанавливать эти атрибуты. Определение структуры    FILETIME приведено  в описании  функции Compare FileTime .

IpftLastWrite

CONST FILETIME*. Указатель на структуру FILETIME, которая содержит дату и время последней записи в файл. Этот параметр может быть равен NULL, если в приложении не требуется устанавливать эти атрибуты. Определение структуры FILETIME приведено в описании функции CompareFileTime.

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

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

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

winbase.h

См. также

GetFileSize, GetFileTime, GetFileType

Пример

В следующем примере показано, как использовать функцию SetFileTime для изменения отметки даты и времени. В этом примере для преобразования из формата структуры даты и времени SYSTEM в формат даты и времени FILETIME применяется функция SystemTimeToFileTime. Время преобразуется из местного времени во время UTC, поскольку функция SetFileTime предназначена для работы со значениями времени, которые определяются относительно времени UTC.

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

SetStdHandle                             + Windows 98   * Windows 2000

Описание

Функция SetStdHandle устанавливает дескриптор стандартного устройства ввода информации, вывода информации или вывода сообщений об ошибках.

Синтаксис

BOOL SetStdHandle( DWORD dwStdHandle, HANDLE hHandle )

Параметры

dwStdHandle

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

Таблица 17.27. Значения параметра dwStdHandle функции SetStdHandle

Значение

Описание

STD_INPUT_HANDLE

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

STD_OUTPUT_HANDLE

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

STD ERROR HANDLE

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

hHandle

HANDLE. Дескриптор, который должен храниться как дескриптор стандартного устройства ввода информации, вывода информации или вывода сообщений об ошибках.

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

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

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

winbase.h

См. также

GetStdHandle

Пример

В следующем примере в качестве стандартного файла вывода сообщений об ошибках устанавливается файл ERROR.LOG, а затем этот стандартный файл используется для вывода сообщений об ошибках, когда пользователь выбирает пункт меню Test!.

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

SystemTimeToFileTime                  «• Windows 98   «• Windows 2000

Описание

Функция SystemTimeToFileTime преобразует значение системного времени в отметку времени.

Синтаксис

BOOL SystemTimeToFileTime( CONST SYSTEMTIME* Ipst, LPFILETIME Ipft )

Параметры

Ipst

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

Ipft

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

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

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

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

winbase.h

См. также

DosDateTimeToFileTime, FileTimeToDosDateTime, FileTimeToSystemTime

Пример

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

UnlockFileWindows 98   • Windows 2000

Описание

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

Синтаксис

BOOL UnlockFile( HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh, DWORD dwUnlockLow, DWORD dwUnlockHigh )

Параметры

hFile

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

dwFile Offset Low

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

dwFileOffsetHigh

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

dwUnlockLow

DWORD. Младшие 32 бита длины байтовой области, которая должна быть разблокирована.

dwUnlockHigh

DWORD. Старшие 32 бита длины байтовой области, которая должна быть разблокирована.

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

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

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

winbase.h

См. также

CreateFile, LockFile

Пример

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

UnlockFileEx                              Windows 98   •  Windows 2000

Описание

Функция UnlockFileEx разблокирует ранее заблокированные байты, которые были заблокированы в результате вызова функции LockFileEx. Количество байтов, подлежащих разблокированию, должно точно соответствовать количеству заблокированных байтов. Два смежных участка в файле нельзя блокировать отдельно, а затем разблокировать с использованием одного участка, который охватывает оба заблокированных участка.

Синтаксис

BOOL UnlockFileEx( HANDLE hFile, DWORD dwReserved, DWORD dwNumberOfBytesToUnlockLow, DWORD dwNumberOfBytesTo Unlockffigh, LPOVERLAPPED IpOverlapped )

Параметры

hFile

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

dwReserved

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

dwNumberOfBytesTo UnlockLow

DWORD. Младшие 32 бита длины байтовой области, которая должна быть разблокирована.

dwNumberOfBytesTo Unlockffigh

DWORD. Старшие 32 бита длины байтовой области, которая должна быть разблокирована.

Ip Overlapped

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

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

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

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

winbase.h

См. также

LockFileEx, ReadFile

Пример

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

UnmapViewOfFile                       + Windows 98   + Windows 2000

Описание

Функция UnmapViewOfFile отменяет отображение представления файла в адресном пространстве вызывающего процесса. Для немедленной фиксации данных на диске перед отменой отображения представления файла необходимо вызывать функцию Flush ViewOfFile. В Windows 98 файлы, для которых не отменено последнее представление, остаются открытыми с такими же ограничениями совместного доступа, как и для дескриптора первоначального файла. В Windows 2000 файлы остаются открытыми без ограничений совместного доступа.

Синтаксис

BOOL UnmapViewOfFile( LPVOID IpBaseAddress )

Параметры

IpBaseAddress

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

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

BOOL. В случае успешного выполнения — TRUE, и все недействительные страницы, принадлежащие к указанному диапазону, должны быть записаны на диск с отложенным подтверждением; в ином случае — FALSE.

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

winbase.h

См. также

MapViewOfFile, MapViewOfFileEx

Пример

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

WriteFile                                  * Window* Qfl  л. Wmrirmic tnnn

Описание

Функция WriteFile выполняет запись данных в файл. Функция начинает записывать данные в файл с позиции, обозначенной указателем файла. После выполнения записи указатель файла смещается на число фактически записанных байтов, если только файл не был открыт с атрибутом FILE_FLAG_OVERLAPPED. Если дескриптор файла был создан для перекрывающегося ввода/вывода, приложение должно само корректировать положение указателя файла после выполнения записи.

Синтаксис

BOOL WriteFile( HANDLE hfile, LPCVOID IpBuffer, DWORD dwNumberOfBytesToWrite, LPDWORD IpNumberOfBytesWritten, LPOVERLAPPED IpOverlapped)

Параметры

hFile

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

IpBuffer

LPCVOID. Указатель на буфер, содержащий данные, которые должны быть записаны в файл.

dwNumberOfBytesToWrite

DWORD. Число байтов, предназначенных для записи в файл. В отличие , от операционной системы MS-DOS, Windows 2000 интерпретирует значение 0 как указание пустой операции записи. Пустая операция записи не приводит к записи каких-либо байтов, но вызывает изменение отметки времени. Операции записи, выполняемые по сети, ограничены 65535 байтами.

IpNumberOfBytes Written

LPDWORD. Указатель на переменную, которая принимает число байтов, записанных в текущем вызове функции. Перед выполнением любой работы или проверки ошибок функция WriteFile устанавливает это значение равным 0.

IpOverlapped

LPOVERLAPPED. Указатель на структуру OVERLAPPED, которая необходима, если дескриптор hFile был открыт с флажком FILE_FLAG_OVERLAPPED. Этот параметр не должен быть равен NULL, если при открытии дескриптора hFtle был указан флажок FILE_FLAG_OVERLAPPED. Он должен указывать на действительную структуру OVERLAPPED. Определение структуры OVERLAPPED приве- , дено в описании функции ReadFile. Если дескриптор hFile не был создан с флажком FILE_FLAG_OVERLAPPED x и параметр IpOverlapped отличен от NULL, запись начинается со смещения, указанного в структуре OVERLAPPED, и функция WriteFile не выполняет возврат до тех пор, пока не будет закончена операция записи.

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

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

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

winbase.h

См. также

CreateFile, GetOverlappedResult, ReadFile, SetEndOfFile, WriteFileEx

Пример

В следующем примере открывается файл FILE.DAT, и в него записывается строка после запуска программы в результате обработки сообщения WM_CREATE. Файл открывается с правами доступа для чтения/записи и остается открытым до закрытия приложения. Когда пользователь выбирает пункт меню Test!, указатель файла устанавливается в начало файла с применением функции   SetFilePointer. Затем функция   ReadFile читает строку из файла. Если при чтении из файла не возникало никаких ошибок, программа отображает строку с применением функции MessageBox и усекает файл до 40 символов путем вызова функции SetEndOfFile.

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

WriteFileEx                               •  Windows 98   • Windows 2000

Описание

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

Синтаксис

BOOL WriteFileEx( HANDLE hFile, LPCVOID IpBuffer, DWORD dwNumberOfBytesToWrite, LPOVERLAPPED Ip Overlapped, LPOVERLAPPED_COMPLETION_ROUTINE IpCompletionRouiine )

Параметры

hFile

HANDLE. Дескриптор открытого файла, в который должны быть записаны   данные.   Дескриптор   файла   должен   быть   открыт   с   флажком FILE_FLAG_OVERLAPPED и с правами доступа GENERIC_WRITE. В Windows 2000 в качестве этого параметра может применяться любой дескриптор, открытый с флажком   FILE_FLAG_OVERLAPPED функцией CreateFile, или дескриптор сокета, возвращенный функциями socket или accept. В Windows 98 в качестве этого параметра может быть указан ресурс связи, почтовый слот, или дескриптор именованного канала, открытый функцией CreateFile с флажком FILE_FLAG_OVERLAPPED, или дескриптор сокета. Система Windows 98 не поддерживает асинхронные операции с файлами на диске.

IpBuffer

LPCVOID. Указатель на буфер, содержащий данные, которые должны быть записаны в файл. Буфер должен оставаться действительным и не использоваться для других целей, пока не закончится операция записи.

dwNumberOfBytesTo Write

DWORD. Число байтов, предназначенных для записи в файл.

IpOverlapped

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

IpCompletionRoutine

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

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

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

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

winbase.h

См. также

ReadFileEx, WriteFile, SleepEx