Что нового

Отслеживание файлов в папке

Radik

Новичок
Сообщения
71
Репутация
1
Добрый день!

Такая задача: из внешнего источника приходят архивные файлы, складываются в определенную папку,
есть служба, которая мониторит эту папку и если там есть файлы, забирает для дальнейшей обработки.
Между поступлением файла и его дальнейшей обработкой 3-4 сек.
Службу отключить нельзя, как-то изменить ее невозможно.
Нужно отслеживать поступаемые файлы и если в имени файла есть "zzz", или "xxx", или "yyy" такие файлы
блокировать, не дать службе забрать для дальнейшей обработки.
Сделал это таким образом:
Код:
HotKeySet("{F10}", "Quit")
Func Quit()
    Exit
EndFunc

#include <File.au3>

$sPath = 'd:\Input\'
While 1
   $FileList = _FileListToArray($sPath)
   For $i = 1 To UBound($FileList) - 1
	  If StringInStr($FileList[$i], "zzz") > 0 Then
		 ;блокирую от дальнейшей обработки
		 $oFile1 = FileOpen($sPath & $FileList[$i], 2)
	  ElseIf StringInStr($FileList[$i], "xxx") > 0 Then
		 $oFile2 = FileOpen($sPath & $FileList[$i], 2)
	  ElseIf StringInStr($FileList[$i], "yyy") > 0 Then
		 $oFile2 = FileOpen($sPath & $FileList[$i], 2)
	  EndIf
   Next
   Sleep(100)
WEnd

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

gunter123

Продвинутый
Сообщения
159
Репутация
69
Как вариант можно использовать маски файлов - не будет нужды проверять каждый файл на наличие строки в названии
Код:
#Include <Array.au3>
#include "File.au3"

HotKeySet("{F10}", "Quit")
Func Quit()
    Exit
 EndFunc

Dim $aMask[] = ["xxx", "yyy", "zzz"] ; Маски файлов

$sPath = 'd:\Input\'
While 1
   For $i = 0 To UBound($aMask) - 1
	  $FileList = _FileListToArray($sPath, "*" & $aMask[$i] & "*.*", 1)
	  For $j = 1 To UBound($FileList) - 1
		 $Open = FileOpen($sPath & $FileList[$j], 2)
	  Next
   Next
   Sleep(50)
WEnd
 

joiner

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

Radik

Новичок
Сообщения
71
Репутация
1
joiner сказал(а):
думаю, что не получится. служба по своим каналам следит за появлением файлов и 99% что не успеешь этот файл заблокировать
На данный момент получается, просто вижу, что мой скрипт не оптимальный.
Можно его улучшить, вот gunter123 предложил хороший вариант.
 
Верх