|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
SetFilePointer
The SetFilePointer function moves the file pointer of an open file.
DWORD SetFilePointer(
HANDLE hFile, // handle of file LONG lDistanceToMove, // number of bytes to move file pointer PLONG lpDistanceToMoveHigh, // address of high-order word of distance to move DWORD dwMoveMethod // how to move );
Parameters
hFile
Identifies the file whose file pointer is to be moved. The file handle must have been created with GENERIC_READ or GENERIC_WRITE access to the file.
lDistanceToMove
Specifies the number of bytes to move the file pointer. A positive value moves the pointer forward in the file and a negative value moves it backward.
lpDistanceToMoveHigh
Points to the high-order word of the 64-bit distance to move. If the value of this parameter is NULL, SetFilePointer can operate only on files whose maximum size is 2^32 - 2. If this parameter is specified, the maximum file size is 2^64 - 2. This parameter also receives the high-order word of the new value of the file pointer.
dwMoveMethod
Specifies the starting point for the file pointer move. This parameter can be one of the following values:
Value Meaning FILE_BEGIN The starting point is zero or the beginning of the file. If FILE_BEGIN is specified, DistanceToMove is interpreted as an unsigned location for the new file pointer. FILE_CURRENT The current value of the file pointer is the starting point. FILE_END The current end-of-file position is the starting point.
Return Values
If the SetFilePointer function succeeds, the return value is the low-order doubleword of the new file pointer, and if lpDistanceToMoveHigh is not NULL, the function puts the high-order doubleword of the new file pointer into the LONG pointed to by that parameter. If the function fails and lpDistanceToMoveHigh is NULL, the return value is 0xFFFFFFFF. To get extended error information, call GetLastError. If the function fails, and lpDistanceToMoveHigh is non-NULL, the return value is 0xFFFFFFFF and GetLastError will return a value other than NO_ERROR.
Remarks
You cannot use the SetFilePointer function with a handle to a nonseeking device, such as a pipe or a communications device. To determine the file type for hFile, use the GetFileType function. You should be careful when setting the file pointer in a multithreaded application. For example, an application whose threads share a file handle, update the file pointer, and read from the file must protect this sequence by using a critical section object or mutex object. For more information about these objects, see Mutex Objects and Critical Section Objects.
If the hFile file handle was opened with the FILE_FLAG_NO_BUFFERING flag set, an application can move the file pointer only to sector-aligned positions. A sector-aligned position is a position that is a whole number multiple of the volume's sector size. An application can obtain a volume's sector size by calling the GetDiskFreeSpace function. If an application calls SetFilePointer with distance-to-move values that result in a position that is not sector-aligned and a handle that was opened with FILE_FLAG_NO_BUFFERING, the function fails, and GetLastError returns ERROR_INVALID_PARAMETER.
Note that if the return value is 0xFFFFFFFF and if lpDistanceToMoveHigh is non-NULL, an application must call GetLastError to determine whether the function has succeeded or failed. The following sample code illustrates this point:
// // Case One: calling the function with // lpDistanceToMoveHigh == NULL // try to move hFile's file pointer some distance dwPointer = SetFilePointer (hFile, lDistance, NULL, FILE_BEGIN) ; // if we failed ... if (dwPointer == 0xFFFFFFFF) { // obtain the error code dwError = GetLastError() ; // deal with that failure . . . } // end of error handler // // Case Two: calling the function with
// lpDistanceToMoveHigh != NULL // try to move hFile's file pointer some huge distance dwPointerLow = SetFilePointer (hFile, lDistanceLow, & lDistanceHigh, FILE_BEGIN) ; // if we failed ... if (dwPointerLow == 0xFFFFFFFF && (dwError = GetLastError()) != NO_ERROR ){ // deal with that failure . . . } // end of error handler
See Also
GetDiskFreeSpace, GetFileType, ReadFile, ReadFileEx, WriteFile, WriteFileEx
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
SetFilePointer
Функция SetFilePointer перемещает файловый указатель открытого файла.
DWORD SetFilePointer(
РУЧКА hFile, // ручка файла ДОЛГО (ДЛИНОЙ) lDistanceToMove, // количество байтов, чтобы перемещать файловый указатель PLONG lpDistanceToMoveHigh, // адрес старшего слова расстояния, чтобы перемещать DWORD dwMoveMethod // как, чтобы перемещаться );
Параметры
hFile
Идентифицирует файл, чей файловый указатель должен быть перемещен. Файловая ручка по-видимому создана GENERIC_READ или доступом GENERIC_WRITE к файлу.
lDistanceToMove
Определяет количество байтов, чтобы перемещать файловый указатель. Положительная величина перемещает форварду указателя в файле и отрицательные перемещения величины, которые она назад.
lpDistanceToMoveHigh
Точки на старшее слово 64- битового расстояния, чтобы перемещаться. Если величина этого параметра НЕДЕЙСТВИТЕЛЬНА, SetFilePointer может подействовать только в файлах чей максимальный размер - 2^32 - 2. Если этот параметр определен, максимальный файловый размер - 2^64 - 2. Этот параметр также получает старшее слово новой величины файлового указателя.
dwMoveMethod
Определяет отправной пункт для файлового перемещения указателя. Этот параметр может быть одним из следующего величин:
Значение Величины FILE_BEGIN отправной пункт - нуль или начало файла. Если FILE_BEGIN определен, DistanceToMove интерпретирован как неподписанная позиция для нового файлового указателя. FILE_CURRENT текущая величина файлового указателя является отправным пунктом. FILE_END текущий конец--файловой позиции является отправным пунктом.
Обратные Величины
Если функция SetFilePointer добивается успеха, обратная величина - младшее двойное слово нового файлового указателя, и если lpDistanceToMoveHigh не НЕДЕЙСТВИТЕЛЕН, функция устанавливает старшее двойное слово нового файлового указателя в ДОЛГО (ДЛИНОЙ) заостренный, чтобы этим параметром. Если функция терпит неудачу и lpDistanceToMoveHigh НЕДЕЙСТВИТЕЛЕН, обратная величина - 0xFFFFFFFF. Для того, чтобы расширять информацию ошибки, назовите GetLastError. Если функция терпит неудачу, и lpDistanceToMoveHigh не-НЕДЕЙСТВИТЕЛЕН, обратная величина - 0xFFFFFFFF и GetLastError возвращает величину кроме NO_ERROR.
Замечания
Вы не можете использовать функцию SetFilePointer с ручкой на nonseeking устройство, как например, труба или устройство связи. Для того, чтобы определять файловый тип для hFile, используйте функцию GetFileType. Вы должны быть осторожными при установке файлового указателя в multithreaded приложении. Например, приложение, чья резьба распространяет файловую ручку, корректирует файловый указатель, и прочитанный из файла должно защитить эту последовательность используя критический объект секции или mutex объект. Более подробно об этих объектах, смотри Объекты Mutex и Критические Объекты Секции.
Если файловая ручка hFile была открыта флагом FILE_FLAG_NO_BUFFERING установленным, приложение может переместить файловый указатель только на выровненные секторные позиции. Выровненная секторная позиция является позицией, которая - кратное целого числа секторного размера объема. Приложение может получить секторный размер объема вызывая функцию GetDiskFreeSpace. Если приложение называет SetFilePointer с расстоянием-перемещением величин, которое заканчивается позицией, что не выровнен сектор и ручка, которые были открыты FILE_FLAG_NO_BUFFERING, функция терпит неудачу, и возврат GetLastError ERROR_INVALID_PARAMETER.
Отметьтесь, что если обратная величина - 0xFFFFFFFF и если lpDistanceToMoveHigh не-НЕДЕЙСТВИТЕЛЕН, приложение должно назвать GetLastError, чтобы определять получила функция или терпела неудачу. Следующий код образца иллюстрирует эту точку:
// // Случай Один: вызов функции с // lpDistanceToMoveHigh == НЕДЕЙСТВИТЕЛЬНЫЙ // попытка, чтобы перемещать файловый указатель hFile's некоторое расстояние dwPointer = SetFilePointer (hFile, lDistance, НЕДЕЙСТВИТЕЛЬНЫЙ, FILE_BEGIN); // если мы потерпели бы неудачу... если (dwPointer == 0xFFFFFFFF) { // получите кодовый dwError = ошибки GetLastError(); // сделка с этой неудачей . . . } // конец вручителя ошибки // // Случай Два: вызов функции с
// lpDistanceToMoveHigh != НЕДЕЙСТВИТЕЛЬНЫЙ // попытка, чтобы перемещать файловый указатель hFile's немного огромное расстояние dwPointerLow = SetFilePointer (hFile, lDistanceLow, & lDistanceHigh, FILE_BEGIN); // если мы потерпели бы неудачу... если (dwPointerLow == 0xFFFFFFFF && (dwError = GetLastError()) != NO_ERROR ){ // сделка с этой неудачей . . . } // конец вручителя ошибки
Смотри Также
GetDiskFreeSpace, GetFileType, ReadFile, ReadFileEx, WriteFile, WriteFileEx
|
|
|
|
| |