2009-02-17 70 views
2

我正在访问一个返回PDF文件作为响应的httpwebrequest。我正在将该响应读入内存流,然后转换为文件。问题是,是否有数百个文件正在创建。不知道为什么,我已经尝试了很多方法,并且都做了相同的... 这是返回内存流的第一个方法。将MemoryStream转换为FileStream会创建数百个相同的文件?

 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),并发生同样的事情。非常棒。

回答

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); 
} 
0

我建议您收到客户的更多请求,而不是您认为的。检查您的网络服务器访问日志文件。您显示的代码片段看起来很合理,但并没有显示足够的代码来解释问题 - 您没有显示代码的正确部分。无论如何,检查访问日志或使用某种跟踪。

相关问题