程序做的是出去一個網頁,逐行讀取源代碼,去掉html標籤/代碼,然後將實際的文本/信息寫入文本文件。因爲我希望文本文件只包含我想要的數據/信息,而不是其他任何東西,所以我找它尋找一個特定的字符串,告訴它找到了正確的部分,以便它可以開始寫入文本文件,然後尋找另一個字符串知道何時發現該部分的結尾。它正確地啓動和停止在文件中的正確的行(我把一個計數器確保,並且它正確停止/在正確的位置開始),但是,它沒有完成將所有信息寫入文本文件。它甚至不會停在特定行的末尾 - 它通常會停止在行的中間寫入。舉個例子,如果我想它來閱讀4線,輸出可能類似於:文件流沒有完成寫入文件
文本線路1 .. 文本線路2 .. 文本鋰
,只是停止,即使它應該讀/寫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();
}
我已經試過幾乎所有我能想到的,我一直在使用沖洗試過,我試着讓它繼續讀/寫過去的字符串信號該部分的結尾,但似乎沒有任何工作。我知道我不是最好的編碼者,但我真的很難過。誰能分享一些見解?任何幫助非常感謝!
你忘了調用'file.Close()'。 – 2012-07-30 23:34:00
您的一些對象實現了IDisposable,因此必須在'使用'塊中。這包括'WebResponse','Stream','StreamWriter'等。 – 2012-07-31 00:25:15