Что нового

фундаментальная проблема читать файлы

tonycstech

Новичок
Сообщения
94
Репутация
3
Иногда, совсем не редко, а вчера даже iniread() проявил эту плешь лишайную со вшами, когда скомпилированый скрипт пытается найти файл например:
if file exist (file.exe) = 1 then
run(file.exe)
Endif
иногда, команда run(file.exe) запускается даже если файла там нет.
Следовательно куча ошибок из самого Виндоса "does not exist" у меня по всему экрану.

Вчера, програма которая проверяет процессы, сравнивает их с теме что записаны в .ini файле, дала сбой.
После запуска програма должна была сравнить текущие процессы с теми которые записаны в .ini файле и если их там нет, то затормозить процесс.
.ini уже имеет записи практически на все процессы и проблем до сего дня небыло.
Но вчера, программа запустилась и по каким то причинал стала блокировать все процессы думая что их в списке нет.

Этот баг, проявляется то тут то там. Автоит просто напросто файл если находит то почемуто не может его читать как надо и следовательно дальше уже хаос.

Проверить не могу. НЕ знаю от куда это приходит. Знаю что это приходит в самый неудобный момент.
 

All2khoff

Продвинутый
Сообщения
351
Репутация
65
не встречал ни разу проблем с IniRead года три скрипт работает круглосуточно, перезапускался только при внедрении новых функций или сбоя в электропитании(последние полтора года вообще не трогается)
с run() как бы тоже проблем не наблюдается особенно если пользоваться функцией@error
ProcessClose использую но не в таких масштабах, опять же порассуждаю водя пальцем по воде, если есть белый лист, процессов, то почему бы не внести список (системных и ультраважных) процессов в скрипт полностью, а те процессы что иногда меняются как раз грузить из ini, было бы куда как легче контролировать актуальность списка, и в таком случае работа системы не будет нарушена при возникновения сбоя в файле ini/
 
Автор
T

tonycstech

Новичок
Сообщения
94
Репутация
3
Проблема не с самим iniread, а счемто на чём он основан.
У меня тоже работает круглосуточно, но вот иногда вышибает. Редко но метко.
Системные процессы уже введены в скрипт. Они не проблема. Програма раз в год глючит (вообще без пречины) и всё идёт кувырком.
Возможно проблема не со скриптом а с виндосом ?

Да если бы и так, то почему эта проблема существует ещё с виндоса 7го и до сего дня на разных компах ?
Проблема очень редкая. Обычно проявляется при запуске сразу. Как будто чтото не так запустилось. Если закрыть и запустить опять, всё работает.
Не может один и тот же код то работать то не работать (в смысле элементарной логике оркрой файл, прочитай и действуй)


Если скрипт при запуске не видит файл, то он что, ослеп на новый год или как ?
Всегда работал, и вот тебе на. Я ничего не менял несколько месяцев. Запуск производился регулярно каждый день.
И в один день просто напросто не нашёл .ini файл и пришлось перезагружатся.

Я это наблюдан когда работал над encryption проэкте. Файлы иногда как будто невидимые при первом запуске и видимые при втором.
Чудеса какие то.


Я понимаю внедрение проверки ошибок, но вопрос: если файл есть, то почему скрипт его не видит ? Кот тупо прост.


Код:
While 1
    $ini = @ScriptDir & "\file.ini"
    $msg = IniRead ($ini,"settings","test","error")
    if $msg = "error" then
        MsgBox (16,"Error","blank error")
        ExitLoop
    EndIf
    if @error then
        MsgBox (16,"Error","other error")
        ExitLoop
    EndIf
WEnd


Вот примерно вся система.
В один прекрасный день, какойто из этих эроров вылизет.
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
2 tonycstech
Если мне память не изменяет - зачастую решается выставлением "паузы" в цикле.

Код:
$INI = @ScriptDir & "\file.ini"
While 1
   If Not FileExists($INI) Then
      MsgBox (16,"FileExists","File 'file.ini' NOT found. Sorry...")
      ExitLoop
   EndIf
   $MSG = IniRead ($INI, "settings", "test", "error")
   If $MSG = "error" then
      MsgBox (16,"Error","$MSG error read file's. Good luck...")
      ExitLoop
   EndIf
   Sleep(1000)
WEnd


PS: Ваш "@error" никогда не сработает , т.к. "IniRead" не возвращает никаких ошибок.
 
Последнее редактирование:
Автор
T

tonycstech

Новичок
Сообщения
94
Репутация
3
Пауза не поможет. Чтение ini происходит один раз при запуске и запоменается в array,
По каким то причинам, чтение прокатывает но без данных. Как будто файл пустой или iniread не видит содержание.
Мой пример просто так, для наглядности.

Проблема не в том как построен код, а в том как он работает.
Эта зараза меня кусает однажды в год или реже. Я понятия не имею что происходит и почему. Явно только одно, данные не прочитались и код тем не менее продолжает работать и всё летит в верх дном так как повторные проверки тоже не помогут.

Всё равно что получить по голове от человека неведимки после чего тебя спросят "кто ударил ?" и вокруг стоят 1000 человек.
Незнаю кто, но знаю что мужит.
Незнаю где иммено ошибка, но по поведению определённо гдето с чтением файла на уровне API. Я не заглядывал как iniread функция устроена.
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
В таком случае я не знаю чем помочь. Сорян...
Просто лет 5 назад (больше-меньше) был на форуме поднят вопрос с чтением файла в цикле... и решением было - выставить "паузу". Ну и я на автомате из примера выше сразу же вспомнил про этот момент.

PS: А почему в таком случае не установить 4 параметр (default) в пустую строку и проверять не "error", а на "" ?
PSS: "Проблема не в том как построен код, а в том как он работает." - это я понял, осознал... вопросов нет...

Код:
$INI = @ScriptDir & "\file.ini"
$MSG = ""
While 1 ;~ Зацикливаем до тех пор, пока не будет получено значение из INI файла
   If Not FileExists($INI) Then
      ;~ Файла нет - выводим сообщение и выходим из программы...
      MsgBox (16,"FileExists","File 'file.ini' NOT found. Sorry...")
      Exit
   EndIf
   $MSG = IniRead ($INI, "settings", "test", "")
   If $MSG <> "" then
      ;~ Получено значение KEY выходим из цикла
      ExitLoop
   EndIf
   Sleep(1000)
WEnd
;~ Записываем значение $MSG в массив и (что-то там дальше)
MsgBox (16,"Get $MSG",$MSG)
 
Последнее редактирование:
Верх