该程序的功能是访问网页,逐行读取源代码,剥离html标签/代码,然后将实际文本/信息写入文本文件。因为我希望文本文件只包含我想要的数据/信息,没有其他内容,所以它会查找特定的字符串来确定已经找到正确的部分,以便开始向文本文件写入,并查找另一个字符串以知道何时找到了部分的结尾。它在文件中正确地开始和停止(我放了一个计数器来确保,它在正确的位置停止/开始),但是它并没有完成将所有信息写入文本文件。它甚至不会在特定行的末尾停止——它经常在一行的中间停止写入。例如,如果我想让它读取4行,输出可能如下所示:
第1行文本... 第2行文本... 第3行文本...
就会停止,即使它应该读/写4行。
以下是我的代码:
我已经尝试了我能想到的所有方法,包括使用flush和继续读写超过标记该段落结束的字符串,但似乎都没有效果。虽然我知道自己编码技术并不是最好的,但这真的让我困惑了。是否有人可以提供一些见解?非常感谢您的任何帮助!
第1行文本... 第2行文本... 第3行文本...
就会停止,即使它应该读/写4行。
以下是我的代码:
private void button1_Click(object sender, EventArgs e)
{
string tempString = "";
string startString = "start string";
string endString = "end string";
bool startFlag = false;
bool endFlag = true;
string filename = @"C:\file.txt";
System.IO.StreamWriter file = new System.IO.StreamWriter(filename);
WebRequest request = WebRequest.Create("http://www.website.com/webpage.html");
request.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Console.WriteLine(response.StatusDescription);
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
while (endFlag)
{
tempString = reader.ReadLine();
if (tempString.Contains(startString))
{
startFlag = true;
}
if (tempString.Contains("text"))
{
...
}
if (tempString.Contains("other text"))
{
if (startFlag)
file.WriteLine(tempString.Trim());
}
if (tempString.Contains("different text"))
{
if (startFlag && tempString.Length > 0)
file.WriteLine(tempString.Trim());
}
if (tempString.Contains(endString))
{
endFlag = false;
}
}
MessageBox.Show("Done!", "Finished Writing", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
reader.Close();
dataStream.Close();
response.Close();
Process.Start(filename);
this.Close();
}
我已经尝试了我能想到的所有方法,包括使用flush和继续读写超过标记该段落结束的字符串,但似乎都没有效果。虽然我知道自己编码技术并不是最好的,但这真的让我困惑了。是否有人可以提供一些见解?非常感谢您的任何帮助!
file.Close()
。 - Sani Huttunenusing
块中。这些对象包括WebResponse
、Stream
、StreamWriter
等。 - John Saunders