触发 FileSystemWatcher 时如何获取文件大小?

How can I get a file size when it triggers a FileSystemWatcher?

我需要在指定文件夹中创建文件时获取文件的大小以进行统计。我尝试了不同的解决方案,我找到的最好的解决方案是这个,但它总是 returns 0 而不是文件大小。

$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\Users\GUFE\Desktop"
$watcher.Filter = "*.pdf*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true  


$action = { $path = $Event.SourceEventArgs.FullPath
            $changeType = $Event.SourceEventArgs.ChangeType
            $size = (Get-Item '$path').length
            $logline = "$(Get-Date), $changeType, $path, $size"
            Add-content "C:\Users\GUFE\Desktop\log2.txt" -value $logline
          }    

Register-ObjectEvent $watcher "Created" -Action $action
while ($true) {sleep 5}

现在我只是把信息放在一个日志文件中,看看我是否得到了正确的信息。

预先感谢您的回答。

问题出在这一行:

$size = (Get-Item '$path').length

因为$path在单引号内,字符串插值没有启用,所以Get-Item实际上是在寻找一个名为'$path'的文件,显然,这个文件不存在。不使用引号或 double-quotes 代替:

$size = (Get-Item $path).length