кросспост, не думал, что буду тут глупые вопросы задавать...приходится:)
рисую читалку dbf файлов, созданных в вижуал фоксе(предположительно 5 или 7 версия). часть данных лежит в мемо полях. формат dbf известен, все ок, но
1. до конца не ясно что лежит в четырехбайтном поле в dbf-файле — смещение внутри файла fpt или номер блока мемо и какой тип данных у этих четырех байт
2. пытаюсь прочесть данные типа long след образом:
//** читаю запись
DWORD dwRead;
char* Buffer=new char[HeaderData->record_width];
HANDLE =CreateFile(path GENERIC_READ, // access mode
FILE_SHARE_DELETE|FILE_SHARE_WRITE|FILE_ SHARE_READ, NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
SetFilePointer(hFile,
HeaderData->header_length + (CurrentRec->RecordNumber-1)*HeaderData- >record_width, NULL,FILE_BEGIN);
ReadFile( hFile, Buffer, sizeof(*Buffer),&dwRead,NULL);
CurrentRec->CharData=strdup(Buffer);
delete[] Buffer;
CloseHandle(hFile);
//***читаю значение поля c типом long(4 байта)
char lngval[5];
long val=0;
strncpy(&lngval[0],(FieldData[num]).where,4);
lngval[4]='\0';
val = atol(lngval);
val равен нулю
если сделать ченить типа
typedef struct
{
long value;
} lv;
и читать/копировать данные из файла/массива в эту структуру то значение нормально.
почему не работает atol?
возвращаясь к первому вопросу: пытался привести четыре байта содержимого мемо к long способами указанными в п.2 — ни один не работает
ктонить может подсказать где грабли? может, там еще какихнить преобразований этим четырем байтам сделать нужно?
рисую читалку dbf файлов, созданных в вижуал фоксе(предположительно 5 или 7 версия). часть данных лежит в мемо полях. формат dbf известен, все ок, но
1. до конца не ясно что лежит в четырехбайтном поле в dbf-файле — смещение внутри файла fpt или номер блока мемо и какой тип данных у этих четырех байт
2. пытаюсь прочесть данные типа long след образом:
//** читаю запись
DWORD dwRead;
char* Buffer=new char[HeaderData->record_width];
HANDLE =CreateFile(path GENERIC_READ, // access mode
FILE_SHARE_DELETE|FILE_SHARE_WRITE|FILE_
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
SetFilePointer(hFile,
HeaderData->header_length + (CurrentRec->RecordNumber-1)*HeaderData-
ReadFile( hFile, Buffer, sizeof(*Buffer),&dwRead,NULL);
CurrentRec->CharData=strdup(Buffer);
delete[] Buffer;
CloseHandle(hFile);
//***читаю значение поля c типом long(4 байта)
char lngval[5];
long val=0;
strncpy(&lngval[0],(FieldData[num]).where,4);
lngval[4]='\0';
val = atol(lngval);
val равен нулю
если сделать ченить типа
typedef struct
{
long value;
} lv;
и читать/копировать данные из файла/массива в эту структуру то значение нормально.
почему не работает atol?
возвращаясь к первому вопросу: пытался привести четыре байта содержимого мемо к long способами указанными в п.2 — ни один не работает
ктонить может подсказать где грабли? может, там еще какихнить преобразований этим четырем байтам сделать нужно?
