3

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 句の外でアップロードを試みましたが、ストリームにアクセスできないと表示されます。

どうすればこれにアプローチできますか?この方法で直接行うことも可能ですか、それともローカルドライブに書き込んでからアップロードする必要がありますか...

4

1 に答える 1

4

今後の参考のために、これを行う方法を見つけることができました。圧縮モードで 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");
        }
    }
}
于 2013-10-14T16:19:05.993 に答える