:: Visual Foxpro, Foxpro for DOS
Fseek глюк
danton1973

Сообщений: 144
Откуда: Пермь
Дата регистрации: 10.08.2020
При запуске программы определяю размер конфигурационного файла с помощью fseek(m.gnIniFile,0,2). При первом запуске выдаёт 0. Не закрывая отладчик, запускаю снова - получаю реальный размер файла.....
Где собака порылась?
Ratings: 0 negative/0 positive
Re: Fseek глюк
VeterVFP

Сообщений: 413
Откуда: Москва
Дата регистрации: 26.12.2006
CLEAR
cLogFlNm= 'c:\1\test.ini'
cLogMsg= 'test msg'
? DATETIME()
IF FILE(cLogFlNm, 1)
rFile= FOPEN(cLogFlNm, 12)
nSize =FSEEK(rFile, 0, 2)
? 'Size= '+ TRANSFORM(nSize)
ELSE
rFile= FCREATE(cLogFlNm)
? FPUTS(rFile, cLogMsg)
? 'New file created'
ENDIF
? FCLOSE(rFile)

Показывает размер нормально. А ваш код какой?
Ratings: 0 negative/0 positive
Re: Fseek глюк
danton1973

Сообщений: 144
Откуда: Пермь
Дата регистрации: 10.08.2020
rFile= FOPEN(cLogFlNm, 12)
nSize =FSEEK(rFile, 0, 2)
=FSEEK(rFile, 0, 0)
То же самое
Ratings: 0 negative/0 positive
Re: Fseek глюк
VeterVFP

Сообщений: 413
Откуда: Москва
Дата регистрации: 26.12.2006
=FSEEK(rFile, 0, 2)
покажет 0, если файл в этот момент открыт/заблокирован где-то.
Хотя при этом и rFile вернет -1



Исправлено 1 раз(а). Последнее : VeterVFP, 26.05.22 09:04
Ratings: 0 negative/0 positive
Re: Fseek глюк
akvvohinc

Сообщений: 4257
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
rFile= FOPEN(cLogFlNm, 12)
Надо проверять результат.
Если файл по каким-то причинам не открылся (rFile = -1), то FSEEK() и вернёт 0 (ошибки не будет):
? FSEEK(-1, 0, 2) && 0
Если проверка покажет -1, то выясните причину с помощью FERROR().



Исправлено 2 раз(а). Последнее : akvvohinc, 26.05.22 20:21
Ratings: 0 negative/0 positive
Re: Fseek глюк
of63

Сообщений: 25406
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
...почему не FSIZE... и более АПИшные... а зачем это все вот это вот?
Ratings: 0 negative/0 positive
Re: Fseek глюк
akvvohinc

Сообщений: 4257
Откуда: Москва
Дата регистрации: 11.11.2008
of63
почему не FSIZE... и более АПИшные... а зачем это все вот это вот?
Судя потому, что файл открывается в режиме Read/Write, то ТС требуется не только узнать размер, но и писать в этот файл.

К тому же FSIZE() для получения размера файла требуется играть с настройкой SET COMPATIBLE, что не слишком удобно.

Я бы пользовался обычным ADIR():
= ADIR(arr,filename)
?arr[1,2]
Ratings: 0 negative/1 positive
Re: Fseek глюк
of63

Сообщений: 25406
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
VeterVFP
=FSEEK(rFile, 0, 2)
покажет 0, если файл в этот момент открыт/заблокирован где-то.
Хотя при этом и rFile вернет -1

бред

Все сводится к АПИ винды



Исправлено 1 раз(а). Последнее : of63, 27.05.22 18:04
Ratings: 0 negative/0 positive
Re: Fseek глюк
VeterVFP

Сообщений: 413
Откуда: Москва
Дата регистрации: 26.12.2006
of63
VeterVFP
=FSEEK(rFile, 0, 2)
покажет 0, если файл в этот момент открыт/заблокирован где-то.
Хотя при этом и rFile вернет -1

бред

Все сводится к АПИ винды
Если взять, например, файл архива и открыть его архиватором (то он будет заблокирован).
После этого rFile= FOPEN(cLogFlNm, 12) вернет -1, а FSEEK вернет 0.
И что тут бред?
Ratings: 0 negative/0 positive
Re: Fseek глюк
akvvohinc

Сообщений: 4257
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Если взять, например, файл архива и открыть его архиватором (то он будет заблокирован).
После этого rFile= FOPEN(cLogFlNm, 12) вернет -1, а FSEEK вернет 0.

Если сделать именно то, что вы описали, то файл архива заблокирован не будет.
Более того, при открытом, допустим, в winrar архиве с помощью FWRITE() можно записывать в этот файл, если открыть его и на запись.

И наоборот, если в VFP открыть файл архива на запись, то архиватор его не откроет, а если только на чтение - откроет.

Не будет проблемы также, если этот файл открывать на чтение в нескольких экземплярах VFP или других программ.
Другое дело, если файл где-то уже открыт на запись... Тогда FOPEN() "не сработает".

В общем, дело не в собственно открытом файле, а в режиме его открытия.
Ratings: 0 negative/0 positive
Re: Fseek глюк
VeterVFP

Сообщений: 413
Откуда: Москва
Дата регистрации: 26.12.2006
akvvohinc
В общем, дело не в собственно открытом файле, а в режиме его открытия.
Согласен про режим. Я тестировал на 7zip - с ним была именно описанная мной ситуация. Возможно, он (оболочка менеджера 7zip) открывает его сразу в режиме записи.
Ratings: 0 negative/0 positive
Re: Fseek глюк
of63

Сообщений: 25406
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
of63
VeterVFP
=FSEEK(rFile, 0, 2)
покажет 0, если файл в этот момент открыт/заблокирован где-то.
Хотя при этом и rFile вернет -1

бред

Все сводится к АПИ винды

Имел ввиду, что пользоваться FSEEK для определения доступности файла - это невозможно без операции открытия файла FOPEN (в каком-то режиме доступа), и на этапе открытия все определится - можно пользоваться файлом в этом режиме или нет... Может, я не понял проблы...

Доб. () глюков, кстати, прибавилось, после перехода на 10ку. Не могу понять их, хотя, в силу "возраста" много с чем ковырялся. Просто тупо делаю "костыли" (типа, многократного запроса к АПИ/функции_фокс, было недавно, после покупки накопителя нового. С сетью что-то связано, бывает). На "диске Це" проблем, которые помню, не встречал вроде...



Исправлено 1 раз(а). Последнее : of63, 31.05.22 20:07
Ratings: 0 negative/0 positive
Re: Fseek глюк
Taran
Автор

Сообщений: 13688
Откуда: Красноярск
Дата регистрации: 16.01.2008
of63
....Может, я не понял проблы...

Проблы не понял никто

danton1973
При запуске программы ....с помощью fseek(m.gnIniFile,0,2). При первом запуске выдаёт 0. Не закрывая отладчик, запускаю снова - получаю реальный размер файла.....
Где собака порылась?

(ни в коем случае не для обиды ТС, а скорее наоборот).

Размер файла или что другое - не важно. Вопрос то можно развернуть шире.
Нет же зациклились на размере файла.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 13 WbrErr  (Гостей: 12)

© 2000-2024 Fox Club 
Яндекс.Метрика