На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Testing for the End of the File



The ReadFile function checks for the end-of-file condition (eof) differently for synchronous and asynchronous read operations. When a synchronous read operation reaches the end of a file, ReadFile returns TRUE and sets the variable pointed to by lpNumberOfBytesRead to zero. An asynchronous read operation can encounter the end of a file during the initiating call to ReadFile or during subsequent asynchronous operation.

The test for end-of-file during a synchronous read operation is simple, as shown in the following example:

// attempt a synchronous read operation
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL);
// check for eof
if (bResult && nBytesRead == 0, ) {
// we're at the end of the file
}


The test for end-of-file during an asynchronous read operation is more difficult. There are three end-of-file indicators for asynchronous read operations:

· ReadFile returns FALSE and GetLastError returns ERROR_HANDLE_EOF.
· ReadFile returns FALSE and GetLastError returns ERROR_IO_PENDING.
· GetOverlappedResult returns FALSE and GetLastError returns ERROR_HANDLE_EOF.



The following example shows how to test for an end-of-file during an asynchronous read operation:

// Attempt to initiate an asynchronous read operation.
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL);

// Check if there was a problem.
if (!bResult) {
switch (dwError = GetLastError())
{
case ERROR_HANDLE_EOF:
// At the end of the file.
break;
case ERROR_IO_PENDING:
// I/O pending.
break;
}
}
.
.
.
// Check on an asynchronous read operation.
bResult = GetOverlappedResult(hFile, &gOverlapped, &nBytesRead, TRUE);


// Check if there was a problem.
if (!bResult) {
switch (dwError = GetLastError())
{
case ERROR_HANDLE_EOF:
// At the end of the file
}
}



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Испытание для Конца Файла



Функция ReadFile проверяет на наличие конца--файлового условия (eof) иначе для синхронных и асинхронных действий чтения. Когда синхронное действие чтения достигает конца файла, ReadFile возвращает ИСТИНУ и устанавливает переменную указанную, чтобы lpNumberOfBytesRead в нуль. Асинхронное действие чтения может столкнуться с концом файла в течение вводящего вызова на ReadFile или в течение последующего асинхронного действия.

Тест для конца--файла в течение синхронного действия чтения прост, как показано в следующем примере:

// попытка синхронное действие чтения bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, НЕДЕЙСТВИТЕЛЬНОЕ);
// чек eof
если (bResult && nBytesRead == 0, ) { // мы - в конце файла
}


Тест для конца--файла в течение асинхронного действия чтения - более трудно. Есть три конца--файловых указателей для асинхронных действий чтения:

ЛОЖЬ возврата ReadFile и возврат GetLastError ERROR_HANDLE_EOF.
ЛОЖЬ возврата ReadFile и возврат GetLastError ERROR_IO_PENDING.
ЛОЖЬ возврата GetOverlappedResult и возврат GetLastError ERROR_HANDLE_EOF.



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

// Попытка, чтобы вводить асинхронное действие чтения.
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, НЕДЕЙСТВИТЕЛЬНОЕ);

// Чек если была проблема.
если (!bResult) {
ключ (dwError = GetLastError())
{
случай ERROR_HANDLE_EOF: // В конце файла.
прерывание;
случай ERROR_IO_PENDING: // рассматривать В/В.
прерывание;
}
}
.
.
.
// Чек в асинхронном действии чтения.
bResult = GetOverlappedResult(hFile, &gOverlapped, &nBytesRead, TRUE);


// Чек если была проблема.
если (!bResult) {
ключ (dwError = GetLastError())
{
случай ERROR_HANDLE_EOF:
// В конце файла
}
}



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz