2010-06-30 2 views
1

Я пытаюсь сделать это с помощью C# (Winforms). Код, который я использую, дает мне строку в качестве вывода, но мне нужно иметь заархивированный файл.Чтобы загрузить заархивированный файл с FTP

Я использую следующий код

try 
{ 
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(
          "ftp:SITENAME/FILENAME.zip"); 
    request.Method = WebRequestMethods.Ftp.DownloadFile; 

    // This example assumes the FTP site uses anonymous logon. 
    request.Credentials = new NetworkCredential("", ""); 

    FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 

    Stream responseStream = response.GetResponseStream(); 
    StreamReader reader = new StreamReader(responseStream); 
    //StreamWriter writer = new StreamWriter(responseStream); 

    MessageBox.Show(reader.ReadtoEnd); 

    MessageBox.Show("Download Complete, status {0}" + response.StatusCode); 

    reader.Close(); 
    response.Close(); 
} 
catch (NotSupportedException ne) 
{ 
    MessageBox.Show(ne.Message); 
} 

У меня есть идея, что я должен использовать Open исходную библиотеку из SharpZipLib преобразовать эту строку в архивный файл. Но я не могу найти образец кода, чтобы показать мне, как это сделать.

Я был бы очень признателен, если бы кто-нибудь мог провести меня через этот процесс.

Спасибо,

Sidhanshu

ответ

1

Это может сделать только это.

using ICSharpCode.SharpZipLib.BZip2; 

    public static string Unzip(byte[] compressedbytes) 
      { 
       string result; 
       MemoryStream m_msBZip2 = null; 
       BZip2InputStream m_isBZip2 = null; 

       m_msBZip2 = new MemoryStream(compressedbytes); 
       // read final uncompressed string size stored in first 4 bytes 
       using (BinaryReader reader = new BinaryReader(m_msBZip2, System.Text.Encoding.ASCII)) 
       { 
        Int32 size = reader.ReadInt32(); 

        m_isBZip2 = new BZip2InputStream(m_msBZip2); 
        byte[] bytesUncompressed = new byte[size]; 
        m_isBZip2.Read(bytesUncompressed, 0, bytesUncompressed.Length); 
        m_isBZip2.Close(); 
        m_msBZip2.Close(); 

        result = Encoding.ASCII.GetString(bytesUncompressed, 0, bytesUncompressed.Length); 

        reader.Close(); 
       } 

       return result; 
      } 

      public static byte[] Zip(string sBuffer) 
      { 

       byte[] result; 

       using (MemoryStream m_msBZip2 = new MemoryStream()) 
       { 
        Int32 size = sBuffer.Length; 
        // Prepend the compressed data with the length of the uncompressed data (firs 4 bytes) 
        using (BinaryWriter writer = new BinaryWriter(m_msBZip2, System.Text.Encoding.ASCII)) 
        { 
         writer.Write(size); 

         using (BZip2OutputStream m_osBZip2 = new BZip2OutputStream(m_msBZip2)) 
         { 
          m_osBZip2.Write(Encoding.ASCII.GetBytes(sBuffer), 0, sBuffer.Length); 
          m_osBZip2.Close(); 
         } 

         writer.Close(); 
         result = m_msBZip2.ToArray(); 

         m_msBZip2.Close(); 
        } 
       } 

       return result; 
      } 
+0

Возможно, вы можете увидеть здесь, как писать в zipfile. http://www.eggheadcafe.com/community/aspnet/2/10060149/zip-a-file-using-icsharpc.aspx – Jeroen

Смежные вопросы