Здраствуйте! Помогите пожалуйста разобраться с чтением данных из файла.
Создаю файл
hFile = CreateFile("Test.dat", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN | FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, NULL);
Записываю данные:
void __fastcall TGetDataThread::Execute()
{
int idx;
HANDLE hEvent[2];
OVERLAPPED ov[2];
DWORD TransferSize;
HANDLE WaitList[2];
hEvent[0] = CreateEvent(NULL, TRUE, FALSE, NULL);
hEvent[1] = CreateEvent(NULL, TRUE, FALSE, NULL);
/* Ставим в очередь первый запрос чтения данных */
ZeroMemory(&ov[0], sizeof(OVERLAPPED));
ov[0].hEvent = hEvent[0];
// if(!m->ReadData(&IoReq))
if (!ReadFile(hDevice, ADC_Buf[0], sizeof(ADC_Buf[0]), NULL,
&ov[0]) && (GetLastError() != ERROR_IO_PENDING)) {
// Ошибка
return;
}
idx = 1;
m->START_ADC();
for (; ; ) {
/* Ставим в очередь следующий буфер */
ZeroMemory(&ov[idx], sizeof(OVERLAPPED));
ov[idx].hEvent = hEvent[idx];
if (!ReadFile(hDevice, ADC_Buf[idx], sizeof(ADC_Buf[idx]), NULL,&ov[idx]) && (GetLastError() != ERROR_IO_PENDING))
{ ReadThreadErrorNumber = 0x3; break; } //Ошибка
if(Form1->write)
{
// запишем полученную порцию данных в файл
if(!WriteFile( Form1->hFile, // handle to file to write to
ADC_Buf[idx], // pointer to data to write to file
sizeof(ADC_Buf[idx]), //2*DataStep, // number of bytes to write
&Form1->FileBytesWritten, // pointer to number of bytes written
NULL // pointer to structure needed for overlapped I/O
))
{ ReadThreadErrorNumber = 0x4; break; } // Ошибка
}
idx ^= 1;
/* Ждем окончания предыдущего чтения или прихода команды stop */
WaitList[0] = hStopEvent;
WaitList[1] = hEvent[idx];
if (WaitForMultipleObjects(2, WaitList, FALSE,
INFINITE) != WAIT_OBJECT_0 + 1) {
/* Пришла команда stop */
break;
}
if (!GetOverlappedResult(hDevice, &ov[idx], &TransferSize, TRUE)) {
/* Ошибка */
break;
}
if (Terminated)
return;
Synchronize(&pb);
Synchronize(&capPlus);
//if(Form1->write) Synchronize(&WriteToFile);
} /* for (;;) */
m->STOP_ADC();
CancelIo(hDevice);
GetOverlappedResult(hDevice, &ov[idx], &TransferSize, TRUE);
GetOverlappedResult(hDevice, &ov[idx ^ 1], &TransferSize, TRUE);
CloseHandle(hEvent[1]);
CloseHandle(hEvent[0]);
if (Terminated)
return;
}
А дальше необходимо этот файл открыть и прочитать. Не получается. Помогите пожалуйста. Спасибо.