c#中的memorystream存在很大问题。我的应用程序获取电子邮件的html,并解析作为附件的图像的src值,并将这些src值更改为另一个。这完全没问题。问题是我必须将结果html保存在sharepoint列表中。它确实如此,但是当我看到sharepoint列表中的内容时,它并没有显示电子邮件,只是它的一部分。我不知道内存流是否根本没有保存内容,或者如果保存结果的字符串没有足够的容量来保存内存流存储的内容。如果有任何想法请发布!
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 :(得分:2)
您可以使用使用Save
:
TextWriter
重载来简化此操作
HtmlDocument email = new HtmlDocument();
using (var sw = new StringWriter())
{
email.Save(sw);
return sw.ToString();
}
请注意,您应该始终处置实现IDisposable
的对象(最简单的方法是将它们包含在using
块中,如下所示。)
答案 1 :(得分:0)
我怀疑你是把整个字符串带回这里,而不是Flush()
其他地方的流 - 可能是你把它保存到磁盘上。这里的代码看起来很好。
如果你发布保存它的功能,我猜我们会在那里看到问题。