4

プログラムが行うことは、Web ページに移動し、ソースを 1 行ずつ読み取り、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();
}

考えられるすべてのことを試しました。フラッシュを使用してみました。セクションの終わりを示す文字列を超えて読み書きを続けようとしましたが、何も機能していないようです。私は決して最高のコーダーではないことを知っていますが、本当に困惑しています. 誰でもいくつかの洞察を共有できますか? どんな助けでも大歓迎です!

4

3 に答える 3

3

ファイルを Flush() する必要があります...または使用します

using( System.IO.StreamWriter file = new System.IO.StreamWriter(filename)){
   ....
}
Process.Start(filename);
于 2012-07-30T23:38:16.227 に答える
2

StreamWriter fileファイル名で Start を呼び出す前に、あなたは閉じられたりフラッシュされたりしません。

Close または Disposefileオブジェクト。または、 でラップすることをお勧めしusingます。

于 2012-07-30T23:38:28.860 に答える
0
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();
}
于 2012-07-31T00:27:22.693 に答える