如何只为我的txt文件添加一次值?

时间:2012-10-24 14:25:59

标签: c#

我有这个代码,它在我的Students.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 个答案:

答案 0 :(得分:1)

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

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

虽然这确实提出了问题,但为什么每次都要生成所有要写入文件的行?

答案 1 :(得分:0)

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

if (!File.ReadAllText("students.txt").Contains(newRecord))
{
  // write to file...
}

答案 2 :(得分:0)

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

if (newLastName.CompareTo(lastName) == 0)
{
    lines.Insert(i, newRecord);
    insertionPointFound = true;
}

答案 3 :(得分:0)

为什么在进入方法之前没有delete文件,因为你已经在代码中再次覆盖了

if(File.Exists("Students.txt"))
{
   File.Delete("Students.txt");
}