如何在写入txt文件时增加变量的值 C#

How to increment the value of a variable while writing to a txt file C #

我有以下程序:

数据库(如果你可以在文本文件上调用它)

写入文本文件时,我需要将记录ID增加一个

我怎么会不明白/找不到借助哪种方法可以实现一个循环,我将在其中增加 id,有人能告诉我吗?

我有一种方法可以从 WPF 文本框格式化文本文件:

using (StreamReader sr = new StreamReader("D:\123.txt", true))
{
    while (sr.ReadLine() != null)
    {
        id++;
        using (StreamWriter txt = new StreamWriter("D:\123.txt", true))
        {
            txt.WriteLine(string.Format("{0} {1} {2} {3} {4} {5} {6}\n", id, TBName, TBLName, TBMName, TBInfo, TBMat, TBFiz));
        }
        MessageBox.Show("Данные успешно сохранены!");
    }
}

如何在文本文件中每输入一个新条目,id 就加 1?

数据网格的信息输出如下:

    private void Work()
    {
        try
        {
            List<Student> list = new List<Student>();
            using (StreamReader sr = new StreamReader(fileName, true))
            {
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    var parsed = line.Split(' ');
                    list.Add(new Student
                        (
                           Convert.ToInt32(parsed[0]),
                           parsed[1],
                           parsed[2],
                           parsed[3],
                           Convert.ToInt32(parsed[4]),
                           Convert.ToInt32(parsed[5]),
                           Convert.ToInt32(parsed[6])
                        )); 
                }
            }
            DGridStudents.ItemsSource = list;
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

显示的代码有一些问题。首先,您不能写入已使用 StreamReader/StreamWriter 类 打开以供阅读的文件。但即使可以,也要仔细观察它是如何工作的。首先打开文件,然后开始循环读取一行,然后在同一文件中写入新行,然后读取下一行(下一行可能与您刚刚写入的相同)。
在更好的结果中,您的文件将填满您的磁盘。

要增加最后一行中用作 id 的值,您可以使用此方法

// First read the whole file and get the last line from it
int id = 0;
string lastLine = File.ReadLines("D:\123.txt").LastOrDefault();
if(!string.IsNullOrEmpty(line))
{
    // Now split and convert the value of the first splitted part
    var parts = line.Split();
    if(parts.Length > 0)
    {
        Int32.TryParse(parts[0], out id);
    }
}
 
// You can now increment and write the new line
id++
using (StreamWriter txt = new StreamWriter("D:\123.txt", true))
{
     txt.WriteLine($"{id} {TBName} {TBLName} {TBMName} {TBInfo} {TBMat} {TBFiz}");
}

这种方法将迫使您阅读整个文件以找到最后一行。但是,您可以将第二个文件(和索引文件)添加到您的 txt 中,名称相同但扩展名为 idx。此文件将仅包含最后写入的数字

int id = 0;
string firstLine = File.ReadLines("D:\123.idx").FirstOrDefault();
if(!string.IsNullOrEmpty(line))
{
    // Now split and convert the value of the first splitted part
    var parts = line.Split();
    if(parts.Length > 0)
    {
        Int32.TryParse(parts[0], out id);
    }
}
id++
using (StreamWriter txt = new StreamWriter("D:\123.txt", true))
{
     txt.WriteLine($"{id} {TBName} {TBLName} {TBMName} {TBInfo} {TBMat} {TBFiz}");
}
File.WriteAllText("D:\123.idx", id.ToString());

如果 txt 文件很大,第二种方法可能更好,因为它不需要读取整个 txt 文件,但可能失败的点更多。您有两个文件要处理,这会使 IO 错误的可能性增加一倍,当然我们甚至没有考虑多用户场景。 数据库,即使是基于 SQLite 或 Access 等文件的数据库也更适合这些任务。