2012-02-24 9 views
0

C#의 memorystream과 관련된 큰 문제가 있습니다. 내 응용 프로그램은 전자 메일의 html을 가져오고 첨부 파일 인 이미지의 src 값을 파싱하고 해당 src 값을 다른 것으로 변경합니다. 그건 완벽하게 잘 작동합니다. 문제는 내가 그 결과 HTML을 셰어 포인트 목록에 저장해야한다는 것입니다. 그리고 그것은 그렇습니다. 그러나 sharepoint 목록에있는 내용을 볼 때 전자 메일을 보여주지는 못합니다. 단지 일부분 일뿐입니다. 메모리 스트림이 내용을 전혀 저장하지 못하거나 결과를 저장하고있는 문자열에 메모리 스트림이 저장하고있는 내용을 저장할 수있는 충분한 용량이 있는지 알 수 없습니다. 누구든지 아이디어가 있으면 게시하십시오!memorystream이 모든 내용을 저장하지 않음

string SRC = ""; 
int indice = 0; 
//Console.WriteLine(body); 

HtmlDocument email = new HtmlDocument(); 
email.LoadHtml(body); 
Console.WriteLine("bodylength: " + body.Length);//original length 

foreach (HtmlNode img in email.DocumentNode.SelectNodes("//img")) 
{ 
    SRC = img.GetAttributeValue("src", null); 
    for (int i = 0; i < contentIDS.Count; i++) 
    { 
     if (SRC.Equals(contentIDS[i].ToString())) 
     { 
      //Console.WriteLine("contents" + contentIDS[i].ToString()); 
      indice = i; 
      break; 
     } 
    } 
    img.SetAttributeValue("src", urls[indice].ToString()); 
    Console.WriteLine(img.GetAttributeValue("src", null)); 
} 

//se guarda en memoria los cambios hechos en el html y se retorna e tipo string el html con los cambios realizados 
MemoryStream memoryStream = new MemoryStream(); 
email.Save(memoryStream); 
//memoryStream.SetLength(body.Length); 
memoryStream.Seek(0, System.IO.SeekOrigin.Begin); 
StreamReader streamReader = new StreamReader(memoryStream); 
return streamReader.ReadToEnd();//this is then store in a string when i call this method. The lenght of that string is much much smaller than the original one. 
+0

아마도 using() 블록 내부에서 MemoryStream의 사용을 래핑 해보십시오. – PeskyGnat

+0

단순히 HTML 렌더링 문제가 아닌 것이 확실합니까? 페이지 소스를 보셨습니까? 전체 전자 메일이 있습니까? – Oded

+1

"C#"등을 제목에 추가하지 마십시오. 그것이 바로 태그가있는 것입니다. –

답변

2

당신은 TextWriter 사용하는 Save 과부하 사용하여이 작업을 단순화 할 수 있습니다 : 당신은 항상 IDisposable은 (그림과 같이 가장 간단한 방법은 using 블록 내부를 래핑하는 것입니다) 구현하는 객체를 처리해야

HtmlDocument email = new HtmlDocument(); 
using (var sw = new StringWriter()) 
{ 
    email.Save(sw); 
    return sw.ToString(); 
} 

주 .

+0

이런 식으로 해 주셔서 감사합니다. 전체 내용에 HTML을 저장합니다 !! 대단히 고마워요 – rdk1992

+0

저는 실제로이 라이브러리를 사용한 적이 없으며 handier 과부하가 있는지'HtmlDocument' 클래스에 대해 [소스 코드] (http://htmlagilitypack.codeplex.com/)를 찾았습니다. 그것은 ToString 과부하가 아니라 (문자열에서 직접로드하는'LoadHtml'와 반대입니다.) 불쌍한 점이 있습니다. – Groo

+0

네가 맞다.하지만 어쨌든 도와 줘서 고마워! – rdk1992

0

내 의심은 다시 여기에 전체 문자열을 받고, 당신은 디스크에 저장할 때 어딘가에거나 다른 아마 스트림을 보내고되지 Flush()한다는 것이다. 여기의 코드는 괜찮아 보입니다.

저장 한 곳에서 기능을 게시하면 내 생각에 거기에 문제가 표시됩니다.

관련 문제