2013-07-04 2 views
1

HTTP 서버/클라이언트를 개발 중이며 .txt 파일과 필요없는 파일을 쉽게 읽을 수 있습니다. 많은 기억. 그러나 큰 파일을 보내려 할 때 .exe 또는 .pdf라고하면 메모리 오류가 발생합니다. 이것은 파일을 보내거나 받기 전에 바이트 [] 버퍼의 크기를 지정해야한다는 사실에서 발생합니다. 스트림에서 읽는 동안 버퍼의 크기를 가져 오는 방법이 있습니까?C#에서 HTTP를 통해 대용량 파일을 보내고받을 수있는 방법

ExceptionError: This stream does not support seek operations. 

누군가가 내가 얻을 수있는 방법에 대한 몇 가지 조언을 제공 할 수 있습니다 : "dataStream.Length는"그것은 오류가 발생 호출 할 때 그러나

//Create the stream. 
private Stream dataStream = response.GetResponseStream(); 

//read bytes from stream into buffer. 
byte[] byteArray = new byte[Convert.ToInt32(dataStream.Length)]; 
dataStream.read(byteArray,0,byteArray.Length); 

:

나는 이런 일을하고 싶지 내 바이트 [] 스트림에서 길이?

감사합니다.

답변

1

네트워크 계층에는 응답 스트림의 길이를 알 수있는 방법이 없습니다.

그러나 서버는 얼마나 걸릴지 알려줍니다. 응답 헤더 Content-Length을 살펴보십시오.
해당 헤더가 없거나 잘못 표시되면 운이 다되었습니다. 당신은 데이터가 부족할 때까지 계속 읽어야합니다.

2

스트림CopyTo 메서드를 사용할 수 있습니다.

MemoryStream m = new MemoryStream(); 
dataStream.CopyTo(m); 
byte[] byteArray = m.ToArray(); 

또한 파일에 직접 기록 할 수

var fs = File.Create("...."); 
dataStream.CopyTo(fs); 
관련 문제