c# - 使用 SSH.Net 将 GzipStream 上传到 SFTP

标签 c# .net gzipstream ssh.net

我正在尝试使用 ssh.net 库将压缩的 GZipStream 上传到 sftp 服务器。问题是当我创建 GZipStream 时,它无法再被读取。下面是我的代码:

using (SftpClient client = new SftpClient(connectionInfo))
{
     client.Connect();
     client.ChangeDirectory("/upload");
     var uploadFileDirectory = client.WorkingDirectory + "\testXml.xml.gz";


     using (GZipStream gzs = new GZipStream(stream, CompressionLevel.Fastest))
     {
         stream.CopyTo(gzs);
         client.UploadFile(gzs, "text.xml.gz");
     }
}

SftpClient 的 UploadFile 需要一个流,我需要上传正在压缩的 GzipStream(不存储到本地驱动器然后再次读取)。但是 GZipStream 在压缩时不允许读取。我尝试在 gzipstream using 子句之外进行上传,它说无法访问该流。

我该如何处理?甚至可以直接这样做还是我需要将它写入本地驱动器然后上传...

最佳答案

为了将来引用,我设法找到了如何做到这一点。您无法在压缩模式下读取 gZipStream,但您可以创建另一个 MemoryStream 的前一个流的字节是这样的:

using (SftpClient client = new SftpClient(connectionInfo))
{
    client.Connect();
    client.ChangeDirectory("/upload");

    using (MemoryStream outputStream = new MemoryStream())
    {
        using (var gzip = new GZipStream(outputStream, CompressionLevel.Fastest))
        {
            stream.CopyTo(gzip);                  
        }
        using (Stream stm = new MemoryStream(outputStream.ToArray()))
        {
            client.UploadFile(stm,"txt.gz");
        }
    }
}

关于c# - 使用 SSH.Net 将 GzipStream 上传到 SFTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19326463/

相关文章:

c# - 确定何时释放一些内存的简单算法.Net

c# - GZipStream.Write 方法

java - 使用 GetObjectRequest 和范围读取 AWS S3 GZIP 对象

c# - CRUD 类库设计,返回有关业务逻辑失败的有用消息,这并不异常(exception)

c# - 如何处理null或无效的文本框输入?

c# - 如何使用 MciSendString 在 C# 中选择用于录制的音频设备

c# - 将图像传递到 Android ListView ArrayAdapter

.net - Linq to SQL中是否提供Unpivot(非枢轴)功能?如何?

c# - 我正在尝试使用 GZipStream 在页面上强制执行 gzip 压缩,但浏览器显示我正在使用不受支持的压缩

c# - 无限系列 : While loop ends in infinity