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


Чтение/ Запись данных

Вы не вошли.

 Поиск | Регистрация | Вход 

Даниил
25.10.2011 10:03:38
#1

Гость

Чтение/ Запись данных

Здраствуйте! Помогите пожалуйста разобраться с чтением данных из файла.
Создаю файл
    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;
}
А дальше необходимо этот файл открыть и прочитать. Не получается. Помогите пожалуйста. Спасибо.

Александр
02.11.2011 21:59:13
#2

Гость

Re: Чтение/ Запись данных

*(Код полностью не посмотрел)
Если я правильно понял...
Сей файл бинарный, к примеру его можно открыть far//'ом(но вряд ли вы что то там дельное для вас увидите).
На сайте есть исходники конвертера что бы из бинарного перегнать в ASCII, но я так и не смог дать ему ладу

Александр
02.11.2011 22:02:13
#3

Гость

Re: Чтение/ Запись данных

чуть не забыл этот *.dat файл можно открыть программой L-Graph