我正在访问一个httpwebrequest,它返回一个pdf文件作为响应.我正在将该响应读入内存流,然后转换为文件.问题是,是否正在创建数百个文件.不知道为什么,我尝试了很多方法,并且都做了同样的事情......这是第一个返回内存流的方法.
MemoryStream memStream = new MemoryStream(); byte[] buffer = new byte[2048]; int bytesRead = 0; do { bytesRead = _ResponseStream.Read(buffer, 0, buffer.Length); memStream.Write(buffer, 0, bytesRead); } while (bytesRead != 0);
第二个转换为FileStream ...
byte[] data = stream.ToArray(); FileStream fs = new FileStream(newFile, FileMode.CreateNew); fs.Write(data, 0, data.Length);
有任何想法吗?
编辑添加更多代码......
public MemoryStream GetToStream() { if (_Req == null) throw new Exception("HttpWebRequest is not initialised"); GetResult(_Req); MemoryStream memStream = new MemoryStream(); byte[] buffer = new byte[2048]; int bytesRead = 0; do { bytesRead = _ResponseStream.Read(buffer, 0, buffer.Length); memStream.Write(buffer, 0, bytesRead); } while (bytesRead != 0); _ResponseStream.Close(); if (memStream.Length > 0) return memStream; else return null; }
newFile是要创建的文件的服务器的映射路径.
byte[] data = stream.ToArray(); FileStream fs = new FileStream(newFile, FileMode.Create); fs.Write(data, 0, data.Length); fs.Close();
我尝试过stream.WriteTo(fs),同样的事情发生了.相当古怪.
你不明白为什么你会得到多个文件,但是你应该能够根据文件名得到一些信息 - 每个文件都对应一个值newFile
.
顺便提一下,我注意到你没有关闭你的文件流.使用File.WriteAllBytes
是实现目标的一种更简单的方法,并且不需要您关闭任何内容:
byte[] data = stream.ToArray(); File.WriteAllBytes(newFile, data);
另一种方法是仍然使用a FileStream
(带using
语句),但用于MemoryStream.WriteTo
避免ToArray
必须复制所有数据的调用:
using (FileStream fs = File.Create(newFile)) { stream.WriteTo(fs); }