【问题标题】:Powershell GzipStream, "Cannot find an overload for "GZipStream" and the argument count: "2"Powershell GzipStream,“找不到“GZipStream”的重载和参数计数:“2”
【发布时间】:2019-08-30 16:31:55
【问题描述】:

试图让 GzipStream 在 Posh 中运行。有这个:

[System.IO.MemoryStream] $output = New-Object System.IO.MemoryStream
$gzipStream = New-Object System.IO.Compression.GzipStream $output, ([IO.Compression.CompressionMode]::Optimal)

New-Object 调用出错:

New-Object:找不到“GZipStream”和参数的重载 计数:“2”。

但是该类的文档显示了两个带有两个参数的构造函数。
GZipStream Constructors

我错过了什么?

【问题讨论】:

    标签: powershell gzipstream


    【解决方案1】:

    “Optimal”是CompressionLevel 枚举的成员,而不是CompressionMode 枚举的成员,因此您的代码应该是:

    [System.IO.MemoryStream] $output = New-Object System.IO.MemoryStream
    $gzipStream = New-Object System.IO.Compression.GzipStream($output, [IO.Compression.CompressionLevel]::Optimal)
    

    在您的特定情况下,PowerShell 试图提供帮助并将不存在的枚举成员名称转换为 $null

    PS> $null -eq [IO.Compression.CompressionMode]::Optimal
    True
    
    PS> $null -eq [IO.Compression.CompressionMode]::NonExistentMember
    True
    

    所以你的原始代码相当于:

    [System.IO.MemoryStream] $output = New-Object System.IO.MemoryStream
    $gzipStream = New-Object System.IO.Compression.GzipStream $output, $null
    

    这给出了与您相同的异常。错误与其说是找不到带有 2 个参数的 a 构造函数重载,不如说是它找到了多个合适的重载并且无法选择使用哪个重载(参见前两个构造函数在GZipStream Constructors)。

    还请注意,我必须将构造函数参数包装在圆括号中——这会改变 PowerShell 以某种方式解析要调用的构造函数的方式。我不确定确切的细节,但使用圆括号可以让它工作!

    [System.IO.MemoryStream] $output = New-Object System.IO.MemoryStream
    $gzipStream = New-Object System.IO.Compression.GzipStream($output, [IO.Compression.CompressionLevel]::Optimal)
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多