O monitoramento da pasta não funciona sob certas circunstâncias

0

Eu uso um script do powershell ( baseado nisso ) para monitorar uma pasta e saber quando um arquivo é criado.

Meu script é o seguinte:

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = "H:\draw\"
    $watcher.Filter = "*.nrrd"
    $watcher.IncludeSubdirectories = $true
    $watcher.EnableRaisingEvents = $true  

### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
    $action = 
    { 
        $path = $Event.SourceEventArgs.FullPath
        $changeType = $Event.SourceEventArgs.ChangeType

        if ($path -like '*\tumor\*') 
        {
            Write-Host "The file '$path' was $changeType at '$(Get-Date)'" -fore green 
        }    
    }    
### DECIDE WHICH EVENTS SHOULD BE WATCHED 
    Register-ObjectEvent $watcher "Created" -Action $action
    while ($true) {sleep 5}

Quando eu crio o arquivo "à mão", a ação é bem acionada (a frase verde é exibida).

Mas o arquivo não é criado manualmente, mas sim por um script PHP. E quando o arquivo é criado pelo script PHP, a ação não é acionada.

Mas quando eu copio / passo o arquivo criado pelo script PHP, ele é acionado, então não é um problema com o arquivo.

É possível fazê-lo funcionar com a criação em PHP?

NB: O arquivo é criado dessa maneira

$file = fopen($path, 'wb');
fwrite($file, $my_data);
fclose($file);

UPDATE

Depois de mais pesquisas, descubro que o problema não é com o PHP, mas quando outro usuário / sessão (aquele que lançou o script powershell) está criando o arquivo.

Veja meu outro post sobre SO

    
por Raccoon 02.01.2018 / 12:40

1 resposta

0

Parece que o PHP não está acionando um evento create, mas possivelmente um evento Changed. Experimente alguns dos outros eventos de aqui

    
por 03.01.2018 / 23:04