HTTP 응답으로 XML 응답을 받고 있는데 잘 작동합니다. 이제 나중에 사용하기 위해 디스크에 저장하려고합니다. C #에서 스트림을 파일에 저장하는 방법에 설명 된 두 번째 방법을 사용하려고합니다 . (첫 번째 방법도 얻지 못했습니다). 파일이 생성되었지만 비어 있습니다.
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
XmlDocument events = new XmlDocument();
events.Load(reader);
var fileStream = File.Create("C:\\XMLfiles\\test.xml");
CopyStream(dataStream, fileStream);
fileStream.Close();
public static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[8 * 1024];
int len;
while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, len);
}
}
이것은 까다로운 상황입니다. 문제는 당신이 HttpResponseStream
이미 읽었다는 것 입니다. 결과적으로 당신은 스트림의 끝입니다. 정상적인 상황에서는 dataStream.Position = 0
. 그러나 여기서는 그렇게 할 수 없습니다. PC에있는 파일에 대해 이야기하는 것이 아니라 네트워크 스트림이므로 "뒤로 이동할 수 없습니다 (이미 전송 됨)". 결과적으로 원본 스트림을 다시 작성하는 대신 XmlDocument
.
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
XmlDocument events = new XmlDocument();
events.Load(reader);
events.Save("C:\\XMLfiles\\test.xml");
이 경우 XmlDocument
네트워크 스트림을 다시 읽으려고하지 않고 에 복사 된 데이터를 저장하기 때문에 작동 합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다