内存流未保存所有内容

本文关键字:保存 内存 | 更新日期: 2023-09-27 18:25:47

c#中的内存流出现了一个大问题。我的应用程序获取电子邮件的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.

内存流未保存所有内容

您可以通过使用TextWriter:的Save重载来简化此过程

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

请注意,您应该始终处理实现IDisposable的对象(最简单的方法是将它们封装在using块中,如图所示)。

我的怀疑是,您正在将整个字符串返回到这里,而这并不是在其他地方Flush()流——可能是在您将其保存到磁盘时。这里的代码看起来不错。

如果你把函数放在保存它的地方,我想我们会在那里看到问题的。