0

我有这段代码,它在我的 Student.txt 中添加了一行,但是,每次我编译并运行代码时,它都会再次执行。我可以添加什么代码以便只添加一次新记录?

string newLastName = "'Constant";
string newRecord = "(LIST (LIST 'Constant 'Malachi 'D ) '1234567890 'mdconstant@mail.usi.edu 4.000000 )";
string line;
string lastName;
bool insertionPointFound = false;

for (int i = 0; i < lines.Count && !insertionPointFound; i++)
{
    line = lines[i];
    if (line.StartsWith("(LIST (LIST "))
    {
        values = line.Split(" ".ToCharArray());
        lastName = values[2];
        if (newLastName.CompareTo(lastName) < 0)
        {
            lines.Insert(i, newRecord);
            insertionPointFound = true;
        }
    }
}

if (!insertionPointFound)
{
    lines.Add(newRecord);                          //This record is always added, making the file longer over time 
                                                    //if it is not deleted each time from the Students.txt file in 
}                                                  //the bin folder.

File.WriteAllLines("Students.txt", lines);
4

4 回答 4

1

您可以检查文件是否已经存在(如代码示例中)或者它是否已经是您想要的方式,然后将其放入 if 语句中

       if (File.Exists("Students.txt") == false)
        {
            File.WriteAllLines("Students.txt", lines);
        }

尽管这确实引出了一个问题,但为什么您每次都首先生成所有要写入文件的行?

于 2012-10-24T14:30:45.967 回答
0

如果您正在写入的内容已知或仅在文件中出现一次,则首先打开文件并检查文件中是否存在要写入的记录。如果没有,则继续写,否则不要写。

if (!File.ReadAllText("students.txt").Contains(newRecord))
{
  // write to file...
}
于 2012-10-24T14:32:47.580 回答
0

你的问题是newLastName.CompareTo(lastName)使用错误。如果newLastName等于lastNameCompareTo返回 0。在这种情况下,您应该设置insertionPointFound = true;

if (newLastName.CompareTo(lastName) == 0)
{
    lines.Insert(i, newRecord);
    insertionPointFound = true;
}
于 2012-10-24T14:37:06.230 回答
0

为什么不在delete进入方法之前访问文件,因为您已经在代码中再次覆盖 -

if(File.Exists("Students.txt"))
{
   File.Delete("Students.txt");
}
于 2012-10-24T14:48:49.483 回答