在某些情况下文件夹监控不起作用

在某些情况下文件夹监控不起作用

我使用 powershell 脚本(基于此) 来监视文件夹并了解文件的创建时间。

我的脚本如下:

### 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}

当我“手动”创建文件时,操作被很好地触发(显示绿色句子)。

但该文件不是手动创建的,而是由 PHP 脚本创建的。当文件由 PHP 脚本创建时,不会触发该操作。

但是当我复制/粘贴 PHP 脚本创建的文件时,它会被触发,所以这不是文件的问题。

是否可以让它与 PHP 下的创建一起工作?


注意:该文件是这样创建的

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

更新

经过进一步研究,我发现问题不在于 PHP,而在于另一个用户/会话(启动 powershell 脚本的用户/会话)创建文件时。

我在 SO 上的另一篇帖子

答案1

似乎 PHP 不会触发 create 事件,但可能触发 Changed 事件。尝试其他一些事件这里

相关内容