C# StreamWriter将行替换为新文本

C# StreamWriter将行替换为新文本,c#,windows,forms,streamwriter,C#,Windows,Forms,Streamwriter,是否可以在不删除其他数据的情况下用新文本替换文本文件中的文本,这是我的示例代码,但它不起作用,我知道它有问题,但我无法解决,谢谢 private void button1_Click_1(object sender, EventArgs e) { StreamReader sr = new StreamReader("test10101.txt"); List<string> lines = new List<string>(); while (!

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

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();

    }
private void按钮1\u单击1(对象发送者,事件参数e)
{
StreamReader sr=新的StreamReader(“test10101.txt”);
列表行=新列表();
而(!sr.EndOfStream)
添加(sr.ReadLine());
输出=Convert.ToInt32(textBox1.Text);
newbal=Convert.ToInt32(行[0])-输出;
MessageBox.Show(“请取现金…”\n\n您的新余额为:$”+newbal);
高级关闭();
{
字符串linetoreplace=行[0];
int newlinevalue=newbal;
字符串内容=sr.ReadToEnd();
StreamWriter sw=新的StreamWriter(“test10101.txt”+“.tmp”);
//contents=Regex.Replace(contents,linetoreplace,newlinevalue.ToString());
contents=contents.Replace(linetoreplace,newlinevalue.ToString());
软件编写线(目录);
sw.Close();
}

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

您可以更轻松地执行该操作:

        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);

请不要用标签堆叠你的问题标题,这是不必要的。它不起作用。这是对问题的很糟糕的解释。请从示例中删除不相关的代码,并添加有关错误/行为的详细信息。问题是,我需要制作一个使用streamwriter和streamreader的程序,只使用1个文本文件,但问题是,如果我使用writeline所有的文本文件都将被替换,我只需要替换一行。错误是,它不写任何数据,你能帮我解决我的问题吗?谢谢你的
内容
变量不是空的吗?你正在关闭streamreader,然后你调用
ReadToEnd
,即使你不关闭它,我认为流的位置是空的由于您之前使用了相同的streamreader来读取整个文件,因此此时将显示在文件末尾。mmm,我如何替换它,例如,在上面的示例中,是否可以将其替换为我的newbal?只需分配新字符串值,如您在我的编辑中所见(想想你在我编辑的同时发表了你的评论)这个简单的解决方案有效,但是它重写了所有文件,它不是最优的。想象一下你的文件相当大。完美的解决方案是替换所需的符号(替换一些字节并保存,而不重写其他字节)@ SergeyKulgan如果你有很大的文件要在特定的位置进行更改,你就必须考虑使用一个数据库,因为它会处理所有你必须克服的问题来进行这样的改变。添加所需的值,然后需要移动下一个字节。