|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
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: // В конце файла } }
|
|
|
|
| |