【问题标题】:TextWriter to TextBox文本写入器到文本框
【发布时间】:2017-06-11 23:52:52
【问题描述】:

我有这个TextWriter

    public static string txt = "./Logs.txt";
    public static TextWriter Logs = File.CreateText(txt);

我想做这样的事情

    textBox1.Text = Logs.ToString();

或者像这样

    Logs.Flush();
    textBox1.Text = "";
    File.WriteAllText(txt, textBox1.Text);

我也试过了

public class ControlWriter : TextWriter
{
    private Control textbox;
    public ControlWriter(Control textbox)
    {
        this.textbox = textbox;
    }

    public override void Write(char value)
    {
        textbox.Text += value;
    }

    public override void Write(string value)
    {
        textbox.Text += value;
    }

    public override Encoding Encoding
    {
        get { return Encoding.ASCII; }
    }
}
//in the Form_Load
    TextWriter TW = new ControlWriter(textBox1);

它可以工作,但如果应用程序开始连续写入,应用程序将冻结....

【问题讨论】:

  • 那你试过了吗?它奏效了吗?如果没有,是什么没用?
  • 没什么用,第一个代码在文本框“System.IO.StreamWriter”中输出这个,第二个代码会给我这样的错误“Logs.txt is used by another process”

标签: c# winforms textbox textwriter


【解决方案1】:

您似乎想读取数据,但问题并没有清楚地描述它,所以我会假设它。

如果是这样,您可以使用TextReader ...

For how to use it, see this.

For Documentation

编辑

TextWriter Logs = File.CreateText(txt);
Logs.Close();
TextReader logs = File.OpenText(txt);
String data = logs.ReadToEnd();
logs.Close();

上述代码有效,您必须关闭打开的文件才能在任何其他进程中使用。

但是,我建议使用File 创建和读取文件。很简单,创建或读取后不用关闭文件,而且很短。

示例:

//To create file, where *txt* is your path.
File.WriteAllText(txt, "Whatever you want in file."); 
//To read your file, where *txt* is your path.
String data = File.ReadAllText(txt)

【讨论】:

  • 我不想关闭TextWriter,因为在那之后日志将停止注册...
  • 一个文件不能被两个进程同时打开……你唯一能做的就是在读完文件后再次打开它。你试过我的代码建议了吗?
  • 在您的第一个代码中,您关闭了TextWriter(之后我无法重新打开它),第二个代码,您使用string 来填充txt 文件,但我不能用string替换我的TextWriter
  • TextWriter 仅用于写入文本,无法读取文本。阅读你必须使用TextReader。您是否尝试过使用File?也许这会起作用...至于再次打开TextWriter,请使用Logs = new TextWriter(yourpath); 如果仍然不起作用,请详细说明您要实现的目标。
  • 兄弟,我知道TextWriter 的用途,不,我不能再次使用Logs = new TextWriter(txt); 我想要的是从我的输出相同的东西(写入txt 文件) TextWriter 进入文本框
【解决方案2】:

我找到了解决方案,这是我使用的代码

            Logs.Flush();
            using (FileStream Steam = File.Open(txt, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                using (StreamReader Reader = new StreamReader(Steam))
                {
                    while (!Reader.EndOfStream)
                    {
                        textBox1.Text = Reader.ReadToEnd();
                        break;
                    }
                }
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多