我正在访问一个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),同样的事情发生了。相当古怪。
答案 0 :(得分:13)
为什么你会得到多个文件并不清楚,但你应该能够根据文件名获得一些信息 - 每个文件对应的值为newFile
顺便说一句,我注意到你没有关闭你的文件流。使用File.WriteAllBytes
是实现目标的一种更简单的方法,并且不需要您关闭任何内容:
byte[] data = stream.ToArray();
File.WriteAllBytes(newFile, data);
另一种方法是仍然使用FileStream
(带using
语句)但使用MemoryStream.WriteTo
来避免调用必须复制所有数据的ToArray
:
using (FileStream fs = File.Create(newFile))
{
stream.WriteTo(fs);
}
答案 1 :(得分:0)
我建议您收到客户的更多请求,而不是您的想法。检查您的Web服务器访问日志文件。您显示的代码片段似乎合理,但没有真正显示足够的代码来解释问题 - 您没有显示正确的代码部分。无论如何,请检查访问日志或使用某种跟踪。