我正在尝试将文件下载到我的计算机,同时将其保存到字节数组:
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) { }
我注意到它没有下载所有文件。
我想这样做,因为我想下载一个文件,同时使用它。 知道为什么会出现这个问题吗?
答案 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);