Что нового

Ожидание освобождения файла для записи (работа с файлом по сети)

Synd007

Учусь
Сообщения
5
Репутация
0
Доброго дня всем экспертам и любителям!
Есть скрипт самописный на основе чтения форума и хелпов.

Код:
#Include <WinAPIEx.au3>
#include <WinAPIFiles.au3>

Global $sFile, $hFile
$sFile='\\192.168.2.241\Data\SHARED\xLog\MyProg.csv'

Local $bSave=False

Do
	Sleep (400)
	if not(_WinAPI_FileInUse($sFile)) Then
		$hFile=FileOpen ( $sFile, 1)
		FileWriteLine($hFile,TimeStamp() &';' & @ComputerName & ';' & @IPAddress1);
		FileClose ($hFile);
		$bSave=True
	EndIf
until $bSave
;MsgBox (0,'Файл освобожден!','Информация записана'&TimeStamp() &';' & @ComputerName & ';' & @IPAddress1,5);

Func TimeStamp() ;вывод времени
   local $tm
   $tm=String(@Hour)&":"&String(@MIN)&":"&String(@SEC)
   Return $tm
EndFunc

Что он должен делать:
Ожидать освобождения файла в фоновом режиме и записывать информацию о пользователе, его IP и времени (единовременно) и закрываться.
В чем проблема:
Скрпит спонтанно выключается в произвольный момент времени. Без записи в файл.
--> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop
+>16:43:28 AutoIt3.exe ended.rc:0
+>16:43:28 AutoIt3Wrapper Finished.
>Exit code: 0 Time: 69.7
то 20 секунд отрабатывает.. то 60.. то 40..
Короче как хочет так и работает


Используйте для AutoIt кода тег [autoit]
autoit.gif

madmasles.
 
Автор
S

Synd007

Учусь
Сообщения
5
Репутация
0
madmasles, Спасибо за исправление. Как раз после поста - пошел протестировал в тестовой ветке.
 
Автор
S

Synd007

Учусь
Сообщения
5
Репутация
0
:scratch:
Граждане..
Большая просьба помочь.
Код то не ста страниц.
Какие есть идеи на этот счет? может кто-то все-таки сталкивался с подобным багом?
Если что-то не учел - с удовольствием выслушаю..
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
проблема с сетью. сбой в передаче данных. достаточно секундного сбоя, чтобы скрипт перестал работать
запускал твой код для слежения за файлом, который был в одной папке со скриптом. все работает нормально
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Synd007 [?]
Какие есть идеи на этот счет?
_WinAPI_FileInUse возвращает 0 если файл не найден, поэтому нужно ещё проверять и код ошибки:

Код:
Do
	Sleep(400)
	
	$fInUse = _WinAPI_FileInUse($sFile)
	
	If Not @error And Not $fInUse Then
		$hFile = FileOpen($sFile, 1)
		FileWriteLine($hFile, TimeStamp() & ';' & @ComputerName & ';' & @IPAddress1) ;
		FileClose($hFile) ;
		$bSave = True
	EndIf
Until $bSave
 
Автор
S

Synd007

Учусь
Сообщения
5
Репутация
0
CreatoR сказал(а):
Synd007 [?]
Какие есть идеи на этот счет?
_WinAPI_FileInUse возвращает 0 если файл не найден, поэтому нужно ещё проверять и код ошибки:

Точно! Об этом не подумал (файл то существует и в доступе к сети нет проблем, но, видимо фазы луны влияют на это значение.. )
Тестим )
Спасибо!
 
Верх