程序所做的就是打开一个网页,逐行读取源文件,去掉html标签/代码,然后将实际的文本/信息写入一个文本文件。因为我希望文本文件只包含我想要的数据/信息,而不包含其他数据/信息,所以我让它寻找一个特定的字符串,告诉它找到了正确的部分,这样它就可以开始写入文本文件,然后它再寻找另一个字符串,以便知道何时找到该部分的末尾。它正确地在文件中的正确行处开始和停止(我放了一个计数器以确保,并且它在正确的位置正确地停止/开始),但是,它没有完成将所有信息写入文本文件。它甚至不会在特定的行尾停止--它通常会在一行中间停止写入。例如,如果我希望它读取4行,输出可能如下所示:
行1的文本..第2行的文本。用于li的文本
并停止,即使它应该读/写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,我尝试让它继续读/写通过表示部分结束的字符串,但似乎都不起作用。我知道我无论如何都不是最好的程序员,但我真的被难住了。有谁能分享一些见解吗?非常感谢您的帮助!
发布于 2012-07-30 23:38:16
你必须刷新()你的文件...或使用
using( System.IO.StreamWriter file = new System.IO.StreamWriter(filename)){
....
}
Process.Start(filename);
发布于 2012-07-30 23:38:29
在对文件名调用Start之前,您的StreamWriter file
未关闭或刷新。
关闭或释放file
对象。或者更好地将其包装在using
中。
发布于 2012-07-31 00:27:23
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";
using (System.IO.StreamWriter file = new System.IO.StreamWriter(filename))
{
WebRequest request = WebRequest.Create("http://www.website.com/webpage.html");
request.Credentials = CredentialCache.DefaultCredentials;
using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())
{
Console.WriteLine(response.StatusDescription);
using (Stream dataStream = response.GetResponseStream())
{
using (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();
}
https://stackoverflow.com/questions/11731112
复制相似问题