0

このコードは、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

4 に答える 4

1

ファイルが(コードサンプルのように)すでに存在するかどうか、またはファイルが既に希望どおりに存在するかどうかを確認し、ifステートメントに入れることができます。

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

これは疑問を投げかけますが、なぜ毎回ファイルに書き込むためのすべての行を生成するのですか?

于 2012-10-24T14:30:45.967 に答える
0

あなたはすでにあなたのコードで再び上書きしているので、なぜdeleteメソッドに入る前にファイルにしないのですか?

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

あなたの問題は間違ったnewLastName.CompareTo(lastName)使い方です。newLastNameがlastNameと等しい場合、CompareToは 0 を返します。この場合、設定する必要がありますinsertionPointFound = true;

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

書き込み内容が既知であるか、ファイル内で 1 回しか発生しない場合は、最初にファイルを開き、書き込むレコードがファイル内に存在するかどうかを確認します。そうでない場合は、書き込みに進みます。そうでない場合は、書き込みません。

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