Форум » [x]Harbour » Где создаётся временный файл для индекса ? » Ответить

Где создаётся временный файл для индекса ?

Andrey: У юзера прога начала вылетать. Вот с такой ошибкой. Причина банальна оказалась, нет места на системном диске. Как определить какой диск нужен для временного файла под индекс ? Где создаётся временный файл для индекса ? И сколько примерно нужно свободного места под индекс ? Вот такая ошибка: [pre2]Application Internal Error - J:\MyProject\Dogovor4win.exe Terminated at: 2021-12-06 12:52:48 Info: Harbour MiniGUI Extended Edition 21.10.3 (32-bit) ANSI Неисправимая ошибка 9302: hb_cdxSortWritePage: Write error in temporary file. Called from ORDCREATE(0) Called from INDEXBASE(354) in Source\form_index.prg Called from (b)HB_MACROBLOCK(0) Called from MYINITINDEX(191) in Source\form_index.prg Called from (b)HB_MACROBLOCK(0) [/pre2]

Ответов - 14

Dima: по идее если в MEM: писать то падать не должно , ну если винда не падает от не достатка свободного места на системном диске то и тут не должно теоретически

Andrey: Dima пишет: по идее если в MEM: писать то падать не должно Нет не МЕМ, обычный драйвер CDX.

Pasha: Andrey пишет: Как определить какой диск нужен для временного файла под индекс ? Где создаётся временный файл для индекса ? Определить можно по переменной окружения TEMP вестимо, и диск соответственно И сколько примерно нужно свободного места под индекс ? Для разных индексов разное свободное место, вестимо. Для одних несколько килобайт, для других десятки мегабайт вестимо А бороться с этим не стоит, это не функция программы, а функция системы. Система сама скажет, что исчерпывается свободное место


Andrey: Pasha пишет: Система сама скажет, что исчерпывается свободное место Да не говорит ВООБЩЕ ! Или юзера не смотрят на это сообщение, тупо закрывают и всё. А прога на МиниГуи ошибку не выдаёт, а просто закрывается. Хорошо хоть Харбор создаёт файл error.log У юзера одна претензия на всё - программа не работает и опять программист виноват в этом. Базы программы размещены на другом диске, а на системном закончилось место 200 Кб всего было. Справочники нормально про индексировались, а основные базы нет. Прога просто тихо исчезла с экрана...

Pasha: Все равно не стоит брать на себя несвойственные функции. А юзеров надо просвещать и воспитывать

Dima: Andrey пишет: Нет не МЕМ, обычный драйвер CDX. ты опять спутал теплое с мягким , ну да ладно....

SergKis: Andrey Ставь в самом начале программы, например, так cDirName := GetStartUpFolder()+"\TEMP" hb_SetEnv( "TEMP", cDirName ) IF ! hb_vfDirExists( cDirName ) hb_vfDirMake( cDirName ) ENDIF

Andrey: SergKis , СПАСИБО !

Pasha: Так при этом весь прикладной и системный софт начнет гадить в эту папку, что нехорошо А система все равно упадет при переполнении диска, вместе с программой Надо лечить проблему, удалять мусор

SergKis: Pasha пишет Так при этом весь прикладной и системный софт начнет гадить в эту папку, что нехорошо В clipper был вариант с SET TMP=... Как hb с этим (т.к. можно такую переменную делать, если да) ? Надо лечить проблему, удалять мусор Удалять из этой TEMP папки всегда можно, например в StartUp, запуская cmd\bat файл или из программы

Pasha: DBFCDX вызывает винапишную функцию создания временного файла, так что там не побалуешь, она создаст файл по SET TEMP Надо лечить болезнь, а не симптомы, как говорят врачи

Andrey: Pasha пишет: Надо лечить болезнь, а не симптомы, как говорят врачи Тогда написать типа такого: [pre2] nSizeDrv := hb_DiskSpace( cDisk, HB_DISK_FREE ) IF nSizeDrv < 1000000 cMsg := "Недостаточно дискового пространства для работы программы !;" cMsg += "Программа НЕ сможет нормально работать !;" cMsg += "Обратитесь к вашему системному программисту !;" AlertStop(cMsg) ENDIF[/pre2] И всю ответственность с себя снять.

Pasha: Лучше для верности проверять и системный, и рабочий диск

SergKis: hb_SetEnv( "TEMP", cDirName ) создает переменную для своего процесса (local area), т.е. для др. программ она не видна, но проверять наличие какого то объема места, не помешает



полная версия страницы