下载到文件并保存到字节数组

时间:2013-04-14 10:14:56

标签: c# .net

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

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 :(得分: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
}

如果您正在立即处理“len”字节,则可能完全丢失“memoryStream”。如果它适合内存,可能更容易使用WebClient.DownloadData,然后使用File.WriteAllBytes。

答案 1 :(得分: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);