|
|
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
Коллеги, задолбал меня "глюк", проявляется случайным образом. * cPath = пусто * cFileName = полный путь к файлу nFHandle = FOPEN(cPath+cFileName) IF nFHandle<0 RETURN -1 ENDIF а здесь уже nFHandle=0 Файл ни в фоксе, ни в параллельных задачах не держится, т.е. открываю только я сам. Если поставить точку останова на строку открытия и пройти по шагам, то файл открывается успешно!!! nFHandle > 40. А при выполнении блоком дает 0. Я уже не знаю откуда ноги растут. Есть какие мысли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 09:23:37 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
amid73Если поставить точку останова на строку открытия и пройти по шагам, то файл открывается успешно!!! nFHandle > 40. А при выполнении блоком дает 0. Что означает фраза "при выполнении блоком"? Выделили в командном окне и нажал "Enter"? Ну, тогда все правильно! Выделенный фрагмент - это отдельный програмный файл. Все переменные, по умолчанию, внутри этого блока имеют область видимости PRIVATE и уничтожаются по завершении блока. Ну, а если выпонение непосредственно в программе, то как определил область видимости переменной nFHandle? LOCAL, PRIVATE, PUBLIC? Где именно выполняешь проверку "а здесь уже nFHandle=0" "здесь" - это где? Сразу за блоком IF ... или что-то еще написано? Или вообще другая процедура? Это вообще фрагмент чего? Метода формы (класса) или файл PRG? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 09:35:09 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
Если надо работать с файлами на низком уровне, то чтобы было меньше геммороя - смотри в сторону функции FILETOSTR и STRTOFILE. Файл перевел в переменную, обрабатываешь как обыкновенную переменную с использованием многочисленных строковых функций и массивов, а закончив обработку опять пишешь на диск обработанный файл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 09:59:41 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
Блоком - я имел ввиду работу в ходе работы программы. Структура программы линейная, ни классов, ни обьектов, примерно такая: * функция обработки файла ... PRIVATE nFHandle ... nFHandle = FOPEN(cPath+cFileName) IF nFHandle<0 RETURN -1 ENDIF ... IF CheckFile()<0 ... ENDIF ... FUNC CheckFile * nFHandle никак не обьявляется, т.е. видна из вызывающей функции ... а здесь из-за 0-го хэндла FSEEK не отрабатывает как должен ... RETURN 1 Точку останова ставлю на команду открытия, далее по шагам - хэндл нормальный, точку ставлю на след.строку "IF nFHandle<0", хэндл=0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 10:08:22 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
sergej_57Если надо работать с файлами на низком уровне, то чтобы было меньше геммороя - смотри в сторону функции FILETOSTR и STRTOFILE. Файл перевел в переменную, обрабатываешь как обыкновенную переменную с использованием многочисленных строковых функций и массивов, а закончив обработку опять пишешь на диск обработанный файл. Есть опытные данные, по работе на файлах больших обьемов: скорость обработки файла на низком уровне в РАЗЫ БЫСТРЕЕ работы с переменной. Причем пробовали различные варианты. Поэтому прошу не предлагать использование др.путей, я о них думал, в моем случае интересует конкретный вопрос, почему хэндл нулевой, а не как в документации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 10:12:17 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
amid73FUNC CheckFile * nFHandle никак не обьявляется, т.е. видна из вызывающей функции ... а здесь из-за 0-го хэндла FSEEK не отрабатывает как должен ... RETURN 1 "Ну, вы, блин, даете" (с) Жизненно важное для корректного функционирования процедуры значение НЕ передаете как параметр? И надеетесь, что сойдет с рук использованное сформированное в вызвавшей процедуре значение? Надо именно передавать хендл как параметр. Да еще и проверять его корректность при входе в процедуру. Кроме повышения надежности кода Вы получите универсальную (до некоторой степени) процедуру не зависящую от способа ее вызова. Надо примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Кроме того, опять пропущен кусок кода. Может, именно в нем дело. Похоже, у Вас происходит программное обнуление значение переменной. Именно в не описанном Вами кусе кода. "Просто так" значения переменных в FoxPro не меняются. Кстати, о какой версии FoxPro идет речь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 10:25:08 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
Коллега, может я плохо обьясняю, но я уже несколько раз сказал, что после строки "nFHandle = FOPEN(cPath+cFileName)" уже в следующей строке nFHandle=0 о вызове каких-то там функций или другого кода после ENDIF речь не идет как еще сказать? nFHandle = FOPEN(cPath+cFileName) IF nFHandle<0 && вот здесь уже nFHandle=0, если работает программа, если по шагам, то nFHandle>0 RETURN -1 ENDIF кстати в открытой таблице в текущей области нет полей с именем "nFHandle" тоже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 11:15:01 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
ну вот картинка мож поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 11:19:55 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
вариант по шагам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 11:23:47 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
Версия FoxPro Количество переменных памяти Объем оперативной памяти Есть вероятность, что вылетели за допустимый предел (раз хендл > 40), либо по ограничениям FoxPro, либо по ограничениям железа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 11:27:47 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
VFP 8.0 (08.00.0000.2521) 91 variables defined, 1045 bytes used 16293 variables available RAM 512Mb config.nt я думаю здесь не при чем, там files=200 поставил (но это ж для ДОС) для VFP ограничение "Maximum # of open files" - "System limit", его и не порулишь пожалуй. Больше всего меня убивает разное поведение программы, работающей непрерывно и по шагам >: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 11:58:27 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
Поскольку вылетает сразу после FOPEN(cPath+cFileName), может присмотреться к cPath+cFileName ? Попробовать с другими путями - может что-то изменится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 12:22:32 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
Хотя fopen должна вернуть -1, не пытаетесь ли вы все-таки открыть один и тот же файл дважды? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 15:01:27 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
Еще может сделать проверку жесткого диска? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 15:04:52 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
Попробуйте сразу после fopen поставить LIST STATUS NOCONSOLE TO FILE stat.txt Результат выложите сюда, может поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 15:09:24 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
Andrey Ts Хотя fopen должна вернуть -1, не пытаетесь ли вы все-таки открыть один и тот же файл дважды? А ведь очень даже может быть! - Возможно даже где-нибудь происходит "задвоение" процедуры - По шагам, внутри процедуры, естественно, все будет нормально. Надо еще попробовать "пошагать" дальше - через процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 15:54:56 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
Если этот файл не закрывается на выходе из той же процедуры... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 15:57:45 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
Andrey Ts, Crispy вы не внимательно смотрели сообщения, я уже говорил, что файл никем не держится, если файл держать, то FOPEN возвращает как и положено -1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 16:42:46 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
Processor is Pentium Select area: 12, Table in Use: C:\TEMP\KB1C01BA.TMP (Readonly) Alias: SQLRESULT Code page: 1251 Lock(s): Exclusive USE Currently Selected Table: Select area: 9, Table in Use: D:\CNT-KS\CKS-TMP\C_SYNDBF.DBF Alias: C_SYNDBF Code page: 1251 Lock(s): Exclusive USE Select area: 6, Table in Use: D:\CNT-KS\CKS-TMP\C_RQ2.DBF Alias: C_RQ2 Code page: 1251 Lock(s): Exclusive USE Select area: 3, Table in Use: D:\CNT-KS\CKS-TMP\C_RQ1.DBF Alias: C_RQ1 Code page: 1251 Lock(s): Exclusive USE Select area: 4, Table in Use: C:\TEMP\KB1C014R.TMP Alias: C_24_1JC0ZNN65 Code page: 1251 Lock(s): Exclusive USE Select area: 8, Table in Use: D:\CNT-KS\CKS-TMP\C_24_BUFFER_1JC0ZNDB6.DBF Alias: C_24_BUFFER_1JC0ZNDB6 Code page: 1251 Memo file: D:\CNT-KS\CKS-TMP\C_24_BUFFER_1JC0ZNDB6.FPT Lock(s): Exclusive USE Select area: 7, Table in Use: D:\CNT-KS\CKS-TMP\C_24_F_C_1JC0ZNDB5.DBF Alias: C_24_F_C_1JC0ZNDB5 Code page: 1251 Memo file: D:\CNT-KS\CKS-TMP\C_24_F_C_1JC0ZNDB5.FPT Lock(s): Exclusive USE Select area: 5, Table in Use: D:\CNT-KS\CKS-TMP\C_24_G_D_1JC0ZNDB4.DBF Alias: C_24_G_D_1JC0ZNDB4 Code page: 1251 Master index file: D:\CNT-KS\CKS-TMP\C_24_G_D_1JC0ZNDB4.IDX Key: SORT Collate: Machine Memo file: D:\CNT-KS\CKS-TMP\C_24_G_D_1JC0ZNDB4.FPT Lock(s): Exclusive USE Select area: 1, Table in Use: C:\TEMP\KB1C000E.TMP Alias: SYS_EDIT_OBJ Code page: 1251 Lock(s): Exclusive USE Class libraries: E:\APP_PUB\ALIB\ALIB.VCX ALIAS ALIB, E:\APP_PUB\ALIB\_UI.VCX ALIAS _UI, E:\APP_PUB\ALIB\_BASE.VCX ALIAS _BASE, E:\VBUH\ADE\_AUX\DN.VCX ALIAS DN User-opened files: C:\TEMP\1\TEST_KVIT.VP3 Handle= 0 Pos= 0 Read=Yes Write= No File search path: D:\CNT-KS\CKS-TMP\NEW_WORK;E:\VBUH;E:\APP_PUB\COMM;E:\VBUH\COMM;E:\VBUH\EOD;E:\VBUH\EOD\CONVERTERS;E:\VBUH\ADE;E:\VBUH\ADE\_AUX;E:\APP_PUB\ADMIN;E:\VBUH\INP_DOC;E:\APP_PUB\ADM;E:\APP_PUB\ARH\;E:\APP_PUB\ALIB\;E:\VBUH\RED_SPR\;E:\APP_PUB\OBJ_EDIT\;E:\VB... Default directory: D:\CNT-KS\CKS-TMP Print file/device: Work area = 9 Margin = 0 Decimals = 2 Memowidth = 50 Typeahead = 20 Blocksize = 64 Reprocess = 0 Refresh = 0,5 SECONDS DDE Timeout = 2000 DDE Safety = on Code page: 1251 Collating sequence: Machine Compiler code page: 1251 Date format: German Macro Hot Key = UDF parameters are passed by: VALUE Textmerge Options Delimiters: Left = << Right = >> Show Alternate - off Confirm - off Fullpath - on Print - off ANSI - off Console - off Heading - on Readborder - off Asserts - off Cursor - on Help - on Safety - off Bell - off Deleted - on Intensity - on Space - on Blink - on Device - scrn Lock - off Status Bar - on Brstatus - off Echo - on Logerrors - on Sysmenus - on Carry - off Escape - on Mouse - on Talk - off Century - on Exact - on Multilocks - off Textmerge - off Clear - on Exclusive - on Near - off Title - off Color - on Fields - off Null - off Unique - off Compatible - off Fixed - off Optimize - on Declared DLLs: aux1 e:\app_pub\dll\budget.dll CharToOem C:\WINDOWS\system32\USER32.dll CreateDirectory C:\WINDOWS\system32\kernel32.dll DeleteFile C:\WINDOWS\system32\kernel32.dll GetActiveWindow C:\WINDOWS\system32\USER32.dll GetCurrentProcess C:\WINDOWS\system32\kernel32.dll GetDC C:\WINDOWS\system32\USER32.dll GetDesktopWindow C:\WINDOWS\system32\USER32.dll GetDeviceCaps C:\WINDOWS\system32\GDI32.dll GetLastError C:\WINDOWS\system32\kernel32.dll GetShortPathName C:\WINDOWS\system32\kernel32.dll LockWindowUpdate C:\WINDOWS\system32\USER32.dll OemToChar C:\WINDOWS\system32\USER32.dll RemoveDirectory C:\WINDOWS\system32\kernel32.dll WaitForSingleObject C:\WINDOWS\system32\kernel32.dll ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 16:46:54 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
Интересно... Судя по тексту, файл был открыт, но номер хендла указан равным нулю. Ни разу такого не встречал... Кстати, DOEVENTS - не помогает? Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 17:02:09 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
а процедура случаем не из таймера запускается? ---------------------------------------------------------- Делай своё дело и будь что будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 17:04:00 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
авторUser-opened files: C:\TEMP\1\TEST_KVIT.VP3 Handle= 0 Pos= 0 Read=Yes Write= No Банально, но все же: может ему не нравится в пути \1\ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 17:33:46 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
Интересно, если изменить условие проверки, и прверять именно неуспешность открытия: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 17:57:34 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
автор Если поставить точку останова на строку открытия и пройти по шагам, то файл открывается успешно!!! nFHandle > 40. А при выполнении блоком дает 0. nFHandle = FOPEN(cPath+cFileName) =INKEY(1) IF nFHandle<0 RETURN -1 ENDIF Mожет поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 18:06:27 |
|
||
|
FOPEN возвращает 0, а не -1 и не >0 !!!
|
|||
|---|---|---|---|
|
#18+
po2Ведь в Help'е не сказано, что 0 это плохо. Я вот тоже хотел спросить - почему 0 считается ошибкой. Ошибка - это -1. Хендлы с 1 по 5 - были стандартные в DOS'е, не знаю - присваевает Windows их или держит для совместимости. Что такое > 40? В LoadModule есть такое - описатель должен быть больше 31, а про FOPEN (ни в API CreateFile) нигде не написано, что 0 неправильно. Попробуй исправить проверку на IF nHandle = -1 может все будет работать нормально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 18:39:47 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33103166&tid=1594101]: |
0ms |
get settings: |
6ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
170ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 490ms |

| 0 / 0 |
