如何在写入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 等文件的数据库也更适合这些任务。
我有以下程序:
数据库(如果你可以在文本文件上调用它)
写入文本文件时,我需要将记录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 等文件的数据库也更适合这些任务。