【问题标题】:HtmlAgilityPack Save Process Not Letting Go Of FileHtmlAgilityPack 保存过程不放开文件
【发布时间】:2012-08-27 19:17:40
【问题描述】:

我通过重写 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() ,我会得到在网站上显示的表格的精确表示。

【问题讨论】:

    标签: c# process html-agility-pack


    【解决方案1】:

    试试这个。可能 Save 方法没有关闭底层流。

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

    【讨论】:

    • 也许吧?无需做出假设。几行代码会显示它实际上关闭了流。
    【解决方案2】:

    编辑

    根据@L.B 的cmets,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 存在问题。顺便说一句,要测试此更改是否会产生影响,您应该从干净的服务器环境开始,而不是在删除相关文件时遇到问题。

    【讨论】:

    • 哇,同样的答案相隔 13 秒?
    • HtmlDocument.Save 关闭流。
    • @L.B 从我在源代码中可以看到,它没有使用using 块或try catch,但这意味着如果@987654327 的内部实现不会关闭流@ 抛出异常。当然,我可能查看了代码的错误部分,所以如果我错了,请纠正我
    • @RobV as File.WriteAllText 不需要显式的 dispose 或 close,都在方法中处理
    • @L.B 这些天 HAP 的来源在哪里?在 Codeplex 上的源代码树上使用 SVN 浏览显示在 Trunk 中的 HtmlDocument 上没有 Save(String filename) 方法,并在 2.0 分支中显示了这样一个方法,其定义如下:StreamWriter sw = new StreamWriter(filename, false, GetOutEncoding()); Save(sw); sw.Close();
    猜你喜欢
    • 2018-06-02
    • 1970-01-01
    • 2012-09-10
    • 2023-03-20
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多