1

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

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) { }

我注意到它并没有下载所有文件。

我想这样做是因为我想下载一个文件并同时使用它。知道为什么会发生这个问题吗?

4

2 回答 2

2

有一种更简单的方法可以使用以下方法获取文件字节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);
于 2014-02-27T11:47:04.630 回答
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 可能更容易。

于 2013-04-14T10:46:16.807 回答