2009-11-20 57 views
0

我有在网络中发送的压缩文件的问题。所有其他格式的我能够除了.zip文件发送..帮助:zip文件流

我尝试了很多我不就没怎么做..代码我写在客户端上传文件,这是微软建议这里是link

我能够创建zip文件,如果我试图打开它说损坏..文件的大小也不尽相同。

这里是代码

public void UploadFile(string localFile, string uploadUrl) 
    { 

     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uploadUrl); 

     req.Method = "PUT"; 
     req.AllowWriteStreamBuffering = true; 

     // Retrieve request stream and wrap in StreamWriter 
     Stream reqStream = req.GetRequestStream(); 
     StreamWriter wrtr = new StreamWriter(reqStream); 

     // Open the local file 


     Stream Stream = File.Open(localFile, FileMode.Open); 

     // loop through the local file reading each line 
     // and writing to the request stream buffer 

     byte[] buff = new byte[1024]; 
     int bytesRead; 
     while ((bytesRead = Stream.Read(buff, 0,1024)) > 0) 
     { 
      wrtr.Write(buff); 
     } 



     Stream.Close(); 
     wrtr.Close(); 

     try 
     { 
      req.GetResponse(); 
     } 
     catch(Exception ee) 
     { 

     } 

     reqStream.Close(); 

请帮我...

感谢

回答

1

的主要问题是,你正在使用一个StreamWriter,这是一个TextWriter,专为文本数据,而不是像zip文件这样的二进制文件。

此外还有Jacob提到的问题,以及您在收到回复之前没有关闭请求流的事实 - 尽管这不会产生任何影响,因为StreamWriter会先关闭它。

下面是固定代码,更改为使用using语句(以避免使流打开),更简单地调用File类,以及更有意义的名称(IMO)。

using (Stream output = req.GetRequestStream()) 
using (Stream input = File.OpenRead(localFile)) 
{ 
    // loop through the local file reading each line 
    // and writing to the request stream buffer 

    byte[] buffer = new byte[1024]; 
    int bytesRead; 
    while ((bytesRead = input.Read(buffer, 0, 1024)) > 0) 
    { 
     output.Write(buffer, 0, bytesRead); 
    } 
} 

注意,您可以方便地提取while循环到一个辅助方法:

public static void CopyStream(Stream input, Stream output) 
{ 
    // loop through the local file reading each line 
    // and writing to the request stream buffer 

    byte[] buffer = new byte[1024]; 
    int bytesRead; 
    while ((bytesRead = input.Read(buffer, 0, 1024)) > 0) 
    { 
     output.Write(buffer, 0, bytesRead); 
    } 
} 

从其它地方使用,只留下:

using (Stream output = req.GetRequestStream()) 
using (Stream input = File.OpenRead(localFile)) 
{ 
    CopyStream(input, output); 
} 
+0

是......你是对的... 谢谢非常感谢很多人.. – Naruto 2009-11-20 07:19:09