【问题标题】:How can I get a file size when it triggers a FileSystemWatcher?触发 FileSystemWatcher 时如何获取文件大小?
【发布时间】:2019-06-28 07:40:01
【问题描述】:

出于统计目的,我需要在指定文件夹中创建文件时获取文件的大小。我尝试了不同的解决方案,我发现最好的一个是这个,但它总是返回 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}

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

提前感谢您的回答。

【问题讨论】:

    标签: powershell file size filesystemwatcher


    【解决方案1】:

    问题出在这一行:

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

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

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

    【讨论】:

    • 非常感谢!现在我的日志中有 2 个大小为 0 的条目和 1 个大小正确的条目。但至少我有一条好线,应该足够我自己解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多