我有这个代码,它在我的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);
答案 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");
}