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

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

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

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


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

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


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

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

 

Ветеран


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

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


support23, файлов только в самой папке? Без учёта вложенных в неё папок?

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



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

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


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


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

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


Цитата Iska:
support23, файлов только в самой папке? Без учёта вложенных в неё папок? »
Да, вложенных папок нет.

Отправлено: 15:05, 22-10-2012 | #3


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


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

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


Получаем список файлов (_FileListToArray,FileFindFirstFile,FileFindNextFile)
Пишем его в файл (например ini)
С нужной периодичностью получаем текущий список и для каждого файла сравниваем со старым списком. Так отсеиваем появление/исчезнвение файлов.
Для каждого файла считаем контрольную сумму (_CRC32()), пишем ее туда-же в ini файл в раздел с именем данного файла. Так сможем отслеживать реальные изменения файлов.
Для отслеживания дат изменения используем информацию из атрибутов (FileGetAttrib (),FileGetTime ()), пишем ее рядом с контрольной суммой.
Определять конкретные изменения в файлах уже сложнее, тут уже от типов файлов зависит...

-------
Информация для размышления
Такому в вузах не научат


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


Ветеран


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

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


support23, пробуйте:
читать дальше »
Код: Выделить весь код
#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"

Local $sComputer         = "."
Local $oSWbemLocator     = ObjCreate("WbemScripting.SWbemLocator")
Local $oSWbemServicesEx  = $oSWbemLocator.ConnectServer($sComputer, "root\cimv2")
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)

$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
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:29, 23-10-2012 | #5


Аватара для AZJIO

Старожил


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

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


FileSystemMonitor
http://autoit-script.ru/index.php/topic,6426.0.html - Если поискать найдётся ещё несколько тем.
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:58, 23-10-2012 | #6


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


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

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


Цитата Iska:
support23, пробуйте: »
Спасибо за предложенный вариант, есть несколько недостатков - не понимает русские имена файлов, при переименовании файла в папке, завершает работу с ошибкой, и желательно чтобы был лог

Отправлено: 15:28, 23-10-2012 | #7


Ветеран


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

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


support23, что означает:
Цитата support23:
не понимает русские имена файлов »
?

Это:
Цитата support23:
при переименовании файла в папке, завершает работу с ошибкой »
посмотрю.

Цитата support23:
и желательно чтобы был лог »
Перенаправьте вывод в файл.

Отправлено: 16:11, 23-10-2012 | #8


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


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

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


1. файл checkdir - копия (2).exe при выполнении в консоли отображается как checkdir - Є®ЇЁп (2).exe ( | Create: [e:\test\checkdir - Є®ЇЁп (2).xml])
2. спасибо
3. для этого недостаточно знаний, к сожалению

Отправлено: 16:24, 23-10-2012 | #9


Ветеран


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

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


Цитата support23:
1. файл checkdir - копия (2).exe при выполнении в консоли отображается как checkdir - Є®ЇЁп (2).exe ( | Create: [e:\test\checkdir - Є®ЇЁп (2).xml]) »


Попробуйте использовать TrueType-шрифт для окна консоли.

Цитата support23:
при переименовании файла в папке, завершает работу с ошибкой, »
Переименовываю, но ошибка не воспроизводится:



Цитата support23:
Цитата Iska:
Перенаправьте вывод в файл. »
3. для этого недостаточно знаний, к сожалению »
Код: Выделить весь код
bla-bla-bla.exe >Log.txt

Отправлено: 01:18, 24-10-2012 | #10



Компьютерный форум 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




 
Переход