Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Работа с файлами на низком уровне / 4 сообщений из 4, страница 1 из 1
13.11.2003, 12:18
    #32322751
Vlad_popov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с файлами на низком уровне
Есть програмка такого содержания
PARAMETER filename
IF ![.DBF]$filename
filename = filename+[.DBF]
ENDIF
fh = FOPEN(filename,2)
a = FREAD(fh,29)
a = LEFT(a,28)+CHR(0)
= FSEEK(fh,0,0)
= FWRITE(fh,a)
= FCLOSE(fh)
Она обнуляет ссылку на cdx - в файле DBF
Но вот в чем проблемма, если запустить из командного окошка все хорошо, а если из программы то "сдыхают" MEMO - поля.
В чем дело не могу разобраться, помогите!!!!!!!!!!!!!!!
...
Рейтинг: 0 / 0
13.11.2003, 12:43
    #32322809
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с файлами на низком уровне
Значения, которые может принимать 28 байт заголовка таблицы:

0x01file has a structural .cdx
0x02file has a Memo field
0x04file is a database (.dbc)

Note that this byte can contain the sum of
any of the above values. For example, 0x03
indicates the table has a structural .cdx
and a Memo field.

Т.е. в 28 байте, кроме ссылки на структурный индексный файл есть еще ссылка на мемо-поля. А если речь идет о файле базы данных (DBC), то еще и признак того, что данная таблица - это именно база данных.

Следовательно, просто обнулять этот байт нельзя. Необходимо вычесть 1 из его значения. Примерно так:

LOCAL lnFD
lnFD=FOPEN(FielName,2)

LOCAL lnByte
=FSEEK(m.tnFD,28,0)
lnByte=ASC(FREAD(m.tnFD,1))
=FSEEK(m.lnFD,28,0)
=FWRITE(m.lnFD,CHR(m.lnByte-1))
=FCLOSE(m.lnFD)
...
Рейтинг: 0 / 0
13.11.2003, 12:45
    #32322814
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с файлами на низком уровне
Да, забыл добавить, что перед вычитанием, следует убедится, что есть, что вычитать. В данном случае значение lnByte должно быть нечетным, т.е.

IF MOD(m.lnByte,2)=1
* Есть признак индексного файла. Вычитаем 1
ENDIF
...
Рейтинг: 0 / 0
13.11.2003, 12:51
    #32322829
Vlad_popov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с файлами на низком уровне
Спасибо
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Работа с файлами на низком уровне / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]