【问题标题】:StreamWriter replace line with a new textStreamWriter 用新文本替换行
【发布时间】:2013-01-10 02:37:21
【问题描述】:

是否可以在不删除其他数据的情况下用新文本替换文本文件中的文本,这是我的示例代码,但它不起作用,我知道它有问题但我无法弄清楚,谢谢,

private void button1_Click_1(object sender, EventArgs e)
{
    StreamReader sr = new StreamReader("test10101.txt");
    List<string> lines = new List<string>();
    while (!sr.EndOfStream)
        lines.Add(sr.ReadLine());
    output = Convert.ToInt32(textBox1.Text);
    newbal = Convert.ToInt32(lines[0]) - output;
    MessageBox.Show("Please get your cash....\n\nYour new balance is: $" + newbal);
    sr.Close();
    {
        string linetoreplace = lines[0];
        int newlinevalue = newbal;
        string contents = sr.ReadToEnd();

        StreamWriter sw = new StreamWriter("test10101.txt" + ".tmp");
        //contents = Regex.Replace(contents, linetoreplace, newlinevalue.ToString());
        contents = contents.Replace(linetoreplace, newlinevalue.ToString());
        sw.WriteLine(contents);
        sw.Close();

    }

我想知道我是使用正则表达式还是直接替换该行,

【问题讨论】:

  • 请不要将你的问题标题与标签堆叠起来,这不是必需的。
  • 它不起作用是对问题的非常糟糕的解释。请从示例中删除不相关的代码,并添加有关您看到的错误/行为的详细信息。
  • 问题是,我需要制作一个使用streamwriter和streamreader的程序,只使用1个文本文件,但问题是,如果我使用writeline,所有的文本文件都会被替换,我只需要单行被替换。那里的错误,它没有写入任何数据,你能帮我解决我的问题吗?谢谢
  • 你的contents变量不是空的吗?您正在关闭流读取器,然后调用ReadToEnd,即使您不关闭它,我认为流位置此时将位于文件的末尾,因为您之前使用相同的流读取器来读取整个文件

标签: c# windows forms streamwriter


【解决方案1】:

你可以更轻松地做到这一点:

        string[] lines = System.IO.File.ReadAllLines("test");
        lines[0] = /* replace with whatever you need */
        System.IO.File.WriteAllLines("test", lines);

希望对你有帮助

如果您不希望在文件的第一行或文本框值不是数字的情况下在您的代码部分中引发异常,我也建议使用int.TryParse

如果你真的想使用 streamwriter,你可以用这个,也是一种更简单的方法:

line[0] = newbal.ToString();
foreach(string s in lines)
    sw.WriteLine(s);

【讨论】:

  • mmm,我该如何替换它,例如在上面的示例中,是否可以用我的 newbal 替换它?
  • 只需要分配新的字符串值,正如您在我的编辑中看到的那样(认为您在我进行编辑的同时发表了您的评论)
  • 简单的解决方案有效,但是它重写了所有文件,它不是最佳的。试想一下,您的文件很大。完美的解决方案是替换刚需要的符号(替换一些字节并保存而不重写其他)
  • @SergeyKulgan 如果您有非常大的文件要在特定位置进行更改,则必须考虑使用数据库,因为它将管理您必须克服的所有问题才能进行此类更改的变化。自己实现它只是重新发明轮子。只需考虑没有足够空间来替换所需值的情况,并且您需要移动下一个字节。
猜你喜欢
  • 2013-09-25
  • 2016-08-08
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
相关资源
最近更新 更多