Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Контроль изменения файлов

Ответить
Настройки темы
[решено] Контроль изменения файлов

Пользователь


Сообщения: 74
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго дня!
Есть задача: Необходимо контролировать файлы (расширения разные - dll, xml, ini и т.д.) в заданной папке, на предмет их удаления, добавления новых, изменения существующих. И отражать это в лог файле (дата, время, какие были изменения - например удален файл name.exe, изменен файл name.ini)
Как это можно реализовать?

Отправлено: 11:44, 22-10-2012

 

Пользователь


Сообщения: 74
Благодарности: 0

Профиль | Отправить PM | Цитировать


Есть несколько файлов в каталоге
E:\Open
Скрипт запускаю на выполнение из Autoit (F5)
при удалении файла из каталога E:\Open получаю ошибку

читать дальше »
Код: Выделить весь код
>"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "E:\Test\mont.au3"
E:\Test\mont.au3 (79) : ==> The requested action with this object has failed.:
$oDictionary.Remove(.TargetInstance.Name)
$oDictionary.Remove(.TargetInstance.Name)^ ERROR

Отправлено: 09:10, 26-10-2012 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


support23, скомпилируйте скрипт и исполняйте скомпилированный файл.

Отправлено: 18:48, 26-10-2012 | #12


Пользователь


Сообщения: 74
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg ScreenShot051.jpg
(21.4 Kb, 17 просмотров)

скомпилировал файл, запустил, при переименовании уже существующего файла в папке получаю такую ошибку:

http://forum.oszone.net/attachment.p...1&d=1351500780

Отправлено: 12:54, 29-10-2012 | #13


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


support23, кажется, я понял: у Вас уже существуют файлы в каталоге перед запуском скрипта. И один из них, после запуска скрипта, Вы пытаетесь удалить. Так?

Отправлено: 22:31, 29-10-2012 | #14


Пользователь


Сообщения: 74
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
support23, кажется, я понял: у Вас уже существуют файлы в каталоге перед запуском скрипта. И один из них, после запуска скрипта, Вы пытаетесь удалить. Так? »
да, всё верно!

Отправлено: 08:53, 30-10-2012 | #15


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Надо будет при запуске заполнять словарь существующими файлами. Пробуйте:
читать дальше »
Код: Выделить весь код
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <file.au3>
#Include <Date.au3>
#Include <WinAPI.au3>
#Include <Crypt.au3>

AutoItSetOption("MustDeclareVars", 1)

Local $sFolder           = "e:\Песочница\0190\0001"

Local $sComputer         = "."
Local $oSWbemLocator     = ObjCreate("WbemScripting.SWbemLocator")
Local $oSWbemServicesEx  = $oSWbemLocator.ConnectServer($sComputer, "root\cimv2")
Local $oSWbemObjectEx
Local $oSWbemSink        = ObjCreate("WbemScripting.SWbemSink")
Local $oSink             = ObjEvent($oSWbemSink, "Sink_")

Local $aSplitPath, $sDrive, $sDir, $sFileName, $sExtension
Local $dtNow, $sNow

Local $sMD5
Local $oDictionary       = ObjCreate("Scripting.Dictionary")


_PathSplit($sFolder & "\", $sDrive, $sDir, $sFileName, $sExtension)

$dtNow = _Date_Time_GetLocalTime()
$sNow  = _Date_Time_SystemTimeToDateTimeStr($dtNow, 1)

For $oSWbemObjectEx In $oSWbemServicesEx.ExecQuery( _
		"SELECT * FROM CIM_DataFile WHERE " & _
		"Drive = '" & $sDrive & "' AND " & _
		"Path = '" & StringReplace($sDir, "\", "\\") & "'" _
	)
	$sMD5 = _Crypt_HashFile($oSWbemObjectEx.Name, $CALG_MD5)

	$oDictionary.Add($oSWbemObjectEx.Name, $sMD5)
	ConsoleWrite($sNow & _WinAPI_WideCharToMultiByte(" |  | Present: [" & $oSWbemObjectEx.Name, 1) & "]" & @CRLF)
Next

$oSWbemServicesEx.ExecNotificationQueryAsync($oSWbemSink, _
	"SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE " & _
	"TargetInstance ISA 'CIM_DataFile' AND " & _
	"TargetInstance.Drive = '" & $sDrive & "' AND " & _
	"TargetInstance.Path = '" & StringReplace($sDir, "\", "\\") & "'" _
)

_Crypt_Startup()

Do
	Sleep(100)
Until(False)

_Crypt_Shutdown()

$oDictionary.RemoveAll

$oDictionary       = 0
$oSink             = 0
$oSWbemSink        = 0
$oSWbemServicesEx  = 0
$oSWbemLocator     = 0

Exit(0)

Func Sink_OnObjectReady($oSWbemObjectEx, $oSWbemAsyncContext)
	With $oSWbemObjectEx
		$dtNow = _Date_Time_GetLocalTime()
		$sNow  = _Date_Time_SystemTimeToDateTimeStr($dtNow, 1)

		Select
			Case .Path_.Class = "__InstanceCreationEvent"
				$sMD5 = _Crypt_HashFile(.TargetInstance.Name, $CALG_MD5)

				$oDictionary.Add(.TargetInstance.Name, $sMD5)
				ConsoleWrite($sNow & _WinAPI_WideCharToMultiByte(" |  | Create:  [" & .TargetInstance.Name, 1) & "]" & @CRLF)
			Case .Path_.Class = "__InstanceModificationEvent"
				$sMD5 = _Crypt_HashFile(.TargetInstance.Name, $CALG_MD5)

				If $oDictionary.Exists(.TargetInstance.Name) Then
					If $oDictionary.Item(.TargetInstance.Name) <> $sMD5 Then
						$oDictionary.Item(.TargetInstance.Name) = $sMD5
						ConsoleWrite($sNow & _WinAPI_WideCharToMultiByte(" |  | Modify:  [" & .TargetInstance.Name, 1) & "]" & @CRLF)
					EndIf
				Else
					$oDictionary.Add(.TargetInstance.Name, $sMD5)
					ConsoleWrite($sNow & _WinAPI_WideCharToMultiByte(" | ± | Modify:  [" & .TargetInstance.Name, 1) & "]" & @CRLF)
				EndIf
			Case .Path_.Class = "__InstanceDeletionEvent"
				$oDictionary.Remove(.TargetInstance.Name)
				ConsoleWrite($sNow & _WinAPI_WideCharToMultiByte(" |  | Delete:  [" & .TargetInstance.Name, 1) & "]" & @CRLF)
			Case Else
				; Nothing to do
		EndSelect
	EndWith
EndFunc
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:25, 30-10-2012 | #16


Пользователь


Сообщения: 74
Благодарности: 0

Профиль | Отправить PM | Цитировать


Благодарю! работает отлично!

Отправлено: 09:36, 31-10-2012 | #17



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Контроль изменения файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Изменения в процессе копирования файлов в Windows 8 OSZone News Новости и события Microsoft 0 01-02-2012 12:30
Разное - Программы для мониторинга изменения файлов petro89 Программное обеспечение Windows 14 06-01-2012 18:12
Непонятности с датой изменения файлов Atle Хочу все знать 4 29-06-2011 12:16
Delphi - Время изменения файлов LilLoco Программирование и базы данных 5 24-01-2011 07:28
Разное - [решено] не видны изменения файлов по сети Shiz Microsoft Office (Word, Excel, Outlook и т.д.) 7 22-12-2010 18:42




 
Переход