2013-10-11 1 views
1

ssh.net 라이브러리를 사용하여 압축 된 GZipStream을 SFTP 서버에 업로드하려고합니다. 문제는 GZipStream을 만들 때 더 이상 읽을 수 없다는 것입니다. 다음은 내 코드는 다음 SftpClient의 UploadFile로는 스트림을 필요SSH.Net을 사용하여 GzipStream을 SFTP로 업로드

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"); 
    } 
} 

나는 (로컬 드라이브에 저장하지 않고 다음 다시 읽기) 압축되고있는 GzipStream을 업로드해야합니다. 그러나 GZipStream은 압축 될 때 읽기를 허용하지 않습니다. gzipstream 절을 사용하여 외부로 업로드를 시도했지만 스트림에 액세스 할 수 없다고 말합니다.

어떻게 접근 할 수 있습니까? 이런 식으로 직접 할 수도 있나요? 아니면 로컬 드라이브에 기록한 다음 업로드해야합니까?

답변

2

나중에 참조 할 수 있도록이 작업을 수행하는 방법을 찾아야합니다. 압축 모드에서 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"); 
     } 
    } 
} 
관련 문제