HtmlAgilityPack保存进程不放过文件



我正在通过重写Render方法并使用HtmlAgilityPack来保存网站的一些渲染html。这是代码:

protected override void Render(HtmlTextWriter writer)
{
    using (HtmlTextWriter htmlwriter = new HtmlTextWriter(new StringWriter()))
    {
        base.Render(htmlwriter);
        string output= htmlwriter.InnerWriter.ToString();
        var doc = new HtmlDocument();
        doc.LoadHtml(output);
        doc.Save(currDir + "\" + reportDir + "\dashboardTable.html");
    }
}

但是,有些进程不释放保存的文件,我无法将其从服务器中删除。有人知道会导致这种情况的HtmlAgilityPack问题吗?

欢迎提出任何建议。

谨致问候。

编辑:

建议的两种方法我都试过了。我还不能确定它们是否是解决方案,因为我的应用程序由于无法删除的文件而冻结在服务器上。然而,当我在自己的机器上使用这些解决方案时,呈现的HTML不再保存为HTML表,而是像这样:

INCIDENT MANAGEMENT
Jul '12     F'12
Trend   F'12    2011
(avg)
Severe Incidents (Sev1/2):  3       2.1 4.16
Severe Avoidable Incidents (Sev1/2):    1       1.3 1.91
Incidents (Sev3):   669     482 460.92
Incidents (Sev4) - No business Impact:  1012        808 793
Proactive Tickets Opened:   15      19.3    14
Proactive Tickets Resolved/Closed:  14      17.3    11
CHANGE MANAGEMENT
Total Planned Changes:  531     560 583.58
Change Success Rate (%):    99.5        99.4    99
Non-Remedial Urgent Changes:    6       11  47.08
PROBLEM MANAGEMENT
New PIRs:   2       1.4 2
Closed PIRs:    0       2   3
Overdue Action items:   2       3.2 0
COMPLIANCE MEASUREMENTS
    Jul Trend   Jun
Total Number of Perimeter Devices:  250     258
Perimeter Devices - Non Compliant:  36      31
Total Number of Internal Devices:   6676        6632
Internal Devices - Non Compliant:   173     160
Unauthorized Perimeter Changes: 0       0
Unauthorized Internal Changes   0       0
LEGEND
ISP LINKS
July    June    Trend
SOC CPO DRP SOC CPO DRP
40% 34% 74%     39% 35% 74%     
BELL MPLS HEAD ENDS
July    June    Trend
SOC CPO SOC CPO
8%  5%  7%  10% 8%  5.5%    7%  10% 
ENTERPRISE NETWORK (# of issues called out)
July    June    Trend
CORE    FW/DMZ  CORE    FW/DMZ
1       0       1       0   
US & INTL (# of issues called out)
July    June    Trend
US  Intl    US  Intl
2   2   2   3   
LINE OF BUSINESS    BELL WAN MPLS
<>  50%-65% >65%    <>  50%-65% >65%    Trend
Retail: 2272    0   1   2269    4   0   
Business Banking:   59  1   0   60  0   0   
Wealth: 122 2   0   121 2   1   
Corporate:  51  0   0   49  2   0   
Remote ATM: 280 0   0   280 0   0   
TOOLS
Version Currency    Vulnerability Status    Health Status
Key Messages:

其中只保存了文本数据,并且丢失了所有的HTML和CSS。如果我只是使用doc。Save()我得到了该表在网站上显示的精确表示。

试试这个。也许Save方法没有关闭基础流。

using( FileStream stream = File.OpenWrite( currDir + "\" + reportDir + "\dashboardTable.html" ) ){
    doc.Save(stream);
    stream.Close();
}

编辑

根据@L.B的评论,HtmlAgilityPack似乎确实像我的例子中那样使用了using块,因此它将确保流被关闭。

因此,正如我在最初答案的末尾所建议的,这一定是服务器环境问题

原始答案

这可能是HtmlAgilityPack的某种错误——您可能需要向开发人员报告。

但是,为了消除这种可能性,您可能需要考虑显式控制文件的StreamWriter的创建,以便您自己显式关闭它。替换此行:

doc.Save(currDir + "\" + reportDir + "\dashboardTable.html");

带有以下内容:

using (StreamWriter fileWriter = new StreamWriter(currDir + "\" + reportDir + "\dashboardTable.html"))
{
  doc.Save(fileWriter);
  fileWriter.Close();
}

如果即使进行了此更改,问题仍然存在,那么这将表明您的服务器环境存在问题,而不是HtmlAgilityPack存在问题。顺便说一句,为了测试这个更改是否有影响,你应该从一个干净的服务器环境开始,而不是在删除有问题的文件时遇到问题。

最新更新