将 HTML 文件读入内存中的字符串变量

Read a HTML file into a string variable in memory

提问人:Bohn 提问时间:8/30/2012 最后编辑:velaBohn 更新时间:11/17/2020 访问量:166883

问:

如果我在磁盘上有一个 HTML 文件,如何在运行时将其一次读入 String 变量?然后我需要对该字符串变量进行一些处理。

一些html文件是这样的:

<html>
    <table cellspacing="0" cellpadding="0" rules="all" border="1" style="border-width:1px;border-style:solid;width:274px;border-collapse:collapse;">
        <COLGROUP><col width=35px><col width=60px><col width=60px><col width=60px><col width=59px></COLGROUP>
        <tr style="height:20px;">
            <th style="background-color:#A9C4E9;"></th><th align="center" valign="middle" style="color:buttontext;background-color:#D3DCE9;">A</th><th align="center" valign="middle" style="color:buttontext;background-color:#D3DCE9;">B</th><th align="center" valign="middle" style="color:buttontext;background-color:#D3DCE9;">C</th><th align="center" valign="middle" style="color:buttontext;background-color:#D3DCE9;">D</th>
        </tr><tr style="height:20px;">
            <th align="center" valign="middle" style="color:buttontext;background-color:#E4ECF7;">1</th><td align="left" valign="top" style="color:windowtext;background-color:window;">Hi</td><td align="left" valign="top" style="color:windowtext;background-color:window;">Cell Two</td><td align="left" valign="top" style="color:windowtext;background-color:window;">Actually a longer text</td><td align="left" valign="top" style="color:windowtext;background-color:window;">Final Word</td>
        </tr>
    </table>
</html>
C# 文件-IO HTML 解析

评论


答:

69赞 empi 8/30/2012 #1

使用 File.ReadAllText 将文件位置作为参数传递。

但是,如果您的真正目标是解析 html,那么我建议您使用 Html Agility Pack

评论

4赞 TGarrett 11/18/2016
在读取文件之前,不要忘记检查文件是否存在。:)
0赞 Harold_Finch 11/12/2018
HAP为我做到了!
25赞 L.B 8/30/2012 #2

System.IO.File.ReadAllText(fileName)

19赞 Forte L. 8/30/2012 #3
string html = File.ReadAllText(path);
4赞 Ted Spence 8/30/2012 #4

你要做什么样的处理?你可以做,后面跟着 。然后,可以在内存中解析XML文档。XmlDocument doc = new XmlDocument();doc.Load(filename)

有关 XmlDocument 的更多信息,请阅读此处:

5赞 Srijan 8/30/2012 #5

用于读取File.ReadAllText(path_to_file)

13赞 s15199d 10/21/2014 #6

这已经基本涵盖了,但是当我在以前的代码示例中遇到问题时,增加了一个补充。

Dim strHTML as String = System.IO.File.ReadAllText(HttpContext.Current.Server.MapPath("~/folder/filename.html"))
4赞 vapcguy 11/20/2018 #7

你可以用简单的方法做到这一点:

string pathToHTMLFile = @"C:\temp\someFile.html";
string htmlString = File.ReadAllText(pathToHTMLFile);

或者你可以用 FileStream/StreamReader 把它流式传输进去:

using (FileStream fs = File.Open(pathToHTMLFile, FileMode.Open, FileAccess.ReadWrite))
{
    using (StreamReader sr = new StreamReader(fs))
    {
        htmlString = sr.ReadToEnd();
    }
}

后一种方法允许您打开文件,同时仍允许其他人对文件执行读/写操作。我无法想象一个 HTML 文件非常大,但它还有一个额外的好处,那就是流式传输文件,而不是像第一种方法那样将其捕获为一个大块。

评论

0赞 om-ha 1/4/2020
后一种方法允许您打开文件,同时仍允许其他人对文件执行读/写操作。您是否暗示第一种方法禁止其他人对文件执行读取操作?因为我不这么认为。
0赞 om-ha 1/4/2020
等待您的回复@vapcguy
1赞 vapcguy 1/6/2020
@om-ha 根本没有试图暗示这一点 - 老实说,我从来没有在做 .但是,我已经使用后一个代码块的多种组合对其进行了测试。我只是把它作为对最后一个代码块中的内容的描述,因为有各种选项可以使用,而这些选项实际上并不像您认为的那样有效。File.ReadAllTextFileModeFileAccess
1赞 Shakoor Hussain Attari 11/17/2020 #8
var htmlText = System.IO.File.ReadAllText(@"C:/filename.html");

如果文件在应用程序根目录下,则用户在下面

var htmlText = System.IO.File.ReadAllText(HttpContext.Current.Server.MapPath(@"~/filename.html"));