触发 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
我需要在指定文件夹中创建文件时获取文件的大小以进行统计。我尝试了不同的解决方案,我找到的最好的解决方案是这个,但它总是 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