2013-04-14 32 views
0

我试图将文件下载到我的计算机,并在同一时间将其保存到字节数组:下载到文件并保存到字节数组

try 
{ 
    var req = (HttpWebRequest)HttpWebRequest.Create(url); 
    var fileStream = new FileStream(filePath, 
     FileMode.Create, FileAccess.Write, FileShare.Write); 

    using (var resp = req.GetResponse()) 
    { 
     using (var stream = resp.GetResponseStream()) 
     { 
      byte[] buffer = new byte[0x10000]; 
      int len; 
      while ((len = stream.Read(buffer, 0, buffer.Length)) > 0) 
      { 
       //Do with the content whatever you want 
       // ***YOUR CODE*** 

       MemoryStream memoryStream = new MemoryStream(); 
       if (len > 0) 
       { 
        memoryStream.Write(buffer, 0, len); 
        len = stream.Read(buffer, 0, buffer.Length); 
       } 

       file = memoryStream.ToArray(); 
       fileStream.Write(buffer, 0, len); 
      } 
     } 
    } 

    fileStream.Close(); 
} 
catch (Exception exc) { } 

而且我注意到,这不是下载所有文件这个。

我想这样做,因为我想下载一个文件,并在同一时间使用它。 任何想法为什么会发生这个问题?

+2

代码没有任何意义...... –

+0

此外,它似乎是一个您以前的问题的dup:http://stackoverflow.com/questions/15951621/download-a-file-and-read-from-it-in-the-same-time –

+4

http://stackoverflow.com/questions/ 1278986 /下载-A-文件过HTTP - 进入 - 一个字节阵列式-C – Guy

回答

1

的问题看起来是双重的阅读 - 你是把不同的东西到存储流/文件流 - 它应该更像:

// declare file/memory stream here 
while ((len = stream.Read(buffer, 0, buffer.Length)) > 0) 
{ 
     memoryStream.Write(buffer, 0, len); 
     fileStream.Write(buffer, 0, len); 
     // if you need to process "len" bytes, do it here 
} 

你也许可以失去“的MemoryStream”完全如果你正在处理“len”字节。如果它适合在内存中,那么只需使用WebClient.DownloadData,然后使用File.WriteAllBytes可能会更容易。

1

还有一个更简单的方法,通过使用来获取文件字节System.Net.WebClient.WebClient()

private static byte[] DownloadFile(string absoluteUrl) 
{ 
    using (var client = new System.Net.WebClient()) 
    { 
     return client.DownloadData(absoluteUrl); 
    } 
} 

用法:

var bytes = DownloadFile(absoluteUrl);