1

Тема: AHK: при очистке документа через File.Open() появляются NUL значения

Имеется следующий код:



FileName = C:\latest.log
File := FileOpen(FileName, "w")
File.Length := 0
File.Close()

Данный код чистит полностью log файл, при этом даже если файл занят другим процессом.
Проблема заключается в следующем..
если в момент очистки всего содержимого таким способом, в log начнётся запись логов с приложения, то произойдёт следующая дичь, которая на картинке ниже:

https://i.imgur.com/4giarBL.png

данные NUL заполняются примерно 256 тысяч раз в одну строчку, а затем резко, рядом с этими нулями появляется новая логированная строчка с приложения прямо впритык к нулям.

Из-за этой хрени, я не могу прочитать данную строчку, т.к Нули мешаются.
Вопрос следующий: Возможно ли как-то избавиться от такого бага?
Можно ли как-то запретить на пару секунд в документе что-либо добавлять или изменять для приложения?
Либо как-то убрать эти нули вручную через обычный Notepad?
Прикладываю документ, который содержит эти Нули снизу (эти Nul видно в Notepad++)

2

Re: AHK: при очистке документа через File.Open() появляются NUL значения

Как вариант - установить атрибут "только для чтения" если это позволит система в момент работы скрипта, затем снять его.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

3

Re: AHK: при очистке документа через File.Open() появляются NUL значения

Clannad5, это что за порно? Пытаться изменить содержимое файла, меняя его размер.

4

Re: AHK: при очистке документа через File.Open() появляются NUL значения

при очистке документа через File.Open()

При очистке картошки через открытие мешка появляются брызги. А то что я чищу картошку молотком, но это так, неважно.

5

Re: AHK: при очистке документа через File.Open() появляются NUL значения

stealzy

А разница?
Я пытался так же сохранить через Notepad++, реакция такая же.
Видимо дело в приложение, которое выдаёт эту хрень.

6

Re: AHK: при очистке документа через File.Open() появляются NUL значения

Clannad5

Принцип замены содержимого, когда оно используется. Т.е. замените в теле цикла переменную, которую он использует - непредвиденные последствия обеспечены, как говорится в справке.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

7 (изменено: Clannad5, 2020-09-19 23:45:20)

Re: AHK: при очистке документа через File.Open() появляются NUL значения

__Михаил__

Вот поэтому я и говорю, проще сделать проверку по времени, сделал как-то так:


F3::
FileEncoding, UTF-8
Loop, read, C:\latest.log
{
    if InStr(A_LoopReadLine, "[Client thread/INFO]: [CHAT] +")
        last_found := A_LoopReadLine
}
last_found := SubStr(last_found, 2, 8)
   RegExMatch(last_found, "^(..):(..):(..)$", t)
   	    HR := t1
        Minute := t2
        second := t3
        HR *= 60
        Minute += HR
        Minute *= 60
        second += Minute
        std := second
   FormatTime, tl2, %A_Now%, HH:mm:ss 
tl := SubStr(tl2, 1, 8)
   RegExMatch(tl2, "^(..):(..):(..)$", t)
      HR2 := t1
   Minute2 := t2
   second2 := t3
   HR2 *= 60
   Minute2 += HR2
   Minute2 *= 60
   second2 += Minute2
   stl := second2
   stl -= std
   if stl > 20
   Msgbox, переменная %stl% больше на 20 секунд
   else
     Msgbox, переменная %stl% меньше на 20 секунд	 
	 Return

И мне вот интересно, а это можно как-то сократить? Можно ли все вычисления с переменными в одну строчку уместить или нет?

P.s а, научился


   	    HR := t1, Minute := t2, second := t3, HR *= 60, Minute += HR, Minute *= 60, second += Minute, std := second