c# - 文件流没有完成写入文件

标签 c# text-files streamreader streamwriter

程序所做的是打开网页,逐行读取源代码,去除 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,我已经尝试让它继续读取/写入表示该部分结束的字符串,但似乎没有任何效果。我知道无论如何我都不是最伟大的编码员,但我真的很困惑。任何人都可以分享一些见解吗?非常感谢任何帮助!

最佳答案

你必须 Flush() 你的文件......或者使用

using( System.IO.StreamWriter file = new System.IO.StreamWriter(filename)){
   ....
}
Process.Start(filename);

关于c# - 文件流没有完成写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11731112/

相关文章:

c# - 从多级列表中的任何位置删除对象(绕过图算法搜索)

c# - StreamReader 和寻求

c# - 覆盖 StreamReader 的 ReadLine 方法

c# - 为什么我得到 "could not find file '\[文件名 ]'"?

c# - VS 2017 Bug 或新功能?

c# - WebDav 命名空间架构

c# - 基类库

Java解析文本文件

javascript - 使用 JavaScript 创建文本文件

java - 将 int 值存储到文本文件中并读取它?