我无法使用WebClient
,在任何人建议之前,因为它使我的合法应用程序看起来像迈克菲病毒。所以请不要建议。
我的服务器上存有binary.txt文件。它大约是1,240kb。但是,HttpWebRequest会将随机数量从1,300kb下载到1,700kb。
HttpWebRequest httpRequest = (HttpWebRequest)
WebRequest.Create("http://deviantsmc.com/binary.txt");
httpRequest.Method = WebRequestMethods.Http.Get;
HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();
Stream httpResponseStream = httpResponse.GetResponseStream();
byte[] buffer = new byte[1240];
int bytesRead = 0;
StringBuilder sb = new StringBuilder();
//FileStream fileStream = File.Create(@"tcontent.txt");
while ((bytesRead = httpResponseStream.Read(buffer, 0, 1240)) != 0)
{
sb.Append(Encoding.ASCII.GetString(buffer));
//fileStream.Write(buffer, 0, bytesRead);
}
File.WriteAllText(@"tcontent1.txt", sb.ToString());
(服务器上的binary.txt文件的内容是ASCII格式,因此我也将编码字符串转换为ASCII格式。)
这是我编码该文本文件(在该服务器上)的方式
我的档案基本上是这样的:
byte[] bytes = File.ReadAllBytes("binary.txt");
String encBytes = Encoding.ASCII.GetString(bytes);
File.WriteAllText(file("binary.txt"), encBytes);
我联系了AV公司,关于WebDownloader
被视为C#中的恶意导入,但他们没有回复我,所以我被迫使用HttpWebRequest
。
答案 0 :(得分:5)
如果您的唯一目标是获取该二进制文件并将其写入磁盘,则只需使用CopyTo
对象上存在的Stream
方法将该流复制到文件中。
你的文件看起来像一个破损的zip文件btw,给出PK
的第一个字符,并在zip规范中使用。
来自wikipedia:
以ASCII字符串形式查看,其中写着“PK”,即发明人Phil Katz的缩写。因此,当在文本编辑器中查看.ZIP文件时,文件的前两个字节通常是“PK”。
我使用7-zip打开您的文件,因为Windows默认不接受它作为有效文件。它包含一个manifest.mf文件,但内容本身似乎缺失。该文件本身的大小为1.269.519字节。
HttpWebRequest httpRequest = (HttpWebRequest)
WebRequest.Create("http://deviantsmc.com/binary.txt");
httpRequest.Method = WebRequestMethods.Http.Get;
HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();
Stream httpResponseStream = httpResponse.GetResponseStream();
// create and open a FileStream, using calls dispose when done
using(var fs= File.Create(@"c:\temp\bin.7z"))
{
// Copy all bytes from the responsestream to the filestream
httpResponseStream.CopyTo(fs);
}
答案 1 :(得分:2)
我认为你应该将整个二进制数据写入本地文件,而不是分段编码,你可以试试这个:
HttpWebRequest httpRequest = (HttpWebRequest)
WebRequest.Create("http://deviantsmc.com/binary.txt");
httpRequest.Method = WebRequestMethods.Http.Get;
HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();
Stream httpResponseStream = httpResponse.GetResponseStream();
using (BinaryReader responseReader = new BinaryReader(httpResponseStream.GetResponseStream()))
{
byte[] bytes = responseReader.ReadBytes((int)response.ContentLength);
using (BinaryWriter sw = new BinaryWriter(File.OpenWrite("tcontent1.txt")))
{
sw.Write(bytes);
sw.Flush();
sw.Close();
}
}
希望这可以提供帮助