powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Работа с файлами на низком уровне
4 сообщений из 4, страница 1 из 1
Работа с файлами на низком уровне
    #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
Работа с файлами на низком уровне
    #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
Работа с файлами на низком уровне
    #32322814
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, забыл добавить, что перед вычитанием, следует убедится, что есть, что вычитать. В данном случае значение lnByte должно быть нечетным, т.е.

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


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