File io 将MemoryStream转换为FileStream会创建数百个相同的文件吗?

File io 将MemoryStream转换为FileStream会创建数百个相同的文件吗?,file-io,filestream,memorystream,File Io,Filestream,Memorystream,我正在访问一个httpwebrequest,它返回一个pdf文件作为响应。我将该响应读入内存流,然后转换为文件。问题是,正在创建数百个文件。不知道为什么,我已经尝试了很多方法,所有的方法都是一样的。。。 这是第一个返回memorystream的方法 MemoryStream memStream = new MemoryStream(); byte[] buffer = new byte[2048]; int bytesRead = 0;

我正在访问一个httpwebrequest,它返回一个pdf文件作为响应。我将该响应读入内存流,然后转换为文件。问题是,正在创建数百个文件。不知道为什么,我已经尝试了很多方法,所有的方法都是一样的。。。 这是第一个返回memorystream的方法

        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),同样的情况也发生了。非常奇怪。

我建议您收到的客户请求比您想象的要多。检查您的Web服务器访问日志文件。您显示的代码片段似乎合理,但实际上没有显示足够的代码来解释问题-您没有显示代码的正确部分。无论如何,请检查访问日志或使用某种跟踪。

不清楚为什么会得到多个文件,但您应该能够根据文件名获得一些信息-每个文件都对应一个值
newFile

顺便说一下,我注意到您没有关闭文件流。使用是实现目标的一种更简单的方法,不需要你完成任何事情:

byte[] data = stream.ToArray();
File.WriteAllBytes(newFile, data);
另一种方法是仍然使用
FileStream
(使用
using
语句),但使用以避免调用
ToArray
,后者必须复制所有数据:

using (FileStream fs = File.Create(newFile))
{
    stream.WriteTo(fs);
}