2012-10-24 76 views
0

我有這段代碼,它向我的Students.txt中添加了一行代碼,但是,每次我編譯並運行代碼時,它都會再次執行代碼。我可以添加哪些代碼,以便只添加一次新記錄?如何僅將一個值添加到我的txt文件中?

string newLastName = "'Constant"; 
string newRecord = "(LIST (LIST 'Constant 'Malachi 'D) '1234567890 '[email protected] 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

如果你正在編寫的文件是已知的或者只發生在文件中,那麼首先打開文件並檢查文件中是否存在要寫入的記錄。如果沒有,那麼繼續寫下來,否則不寫。

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

哇,這是一個簡單的修復。非常感謝!現在完美工作:) – wolne

+0

不客氣。 – DougEC

1

你可以檢查,看看是否該文件已經存在(如代碼示例中),或者如果它已經是你想要的方式,只是把它放到一個if語句

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

雖然,這確實乞討了這個問題,但爲什麼每次都生成所有要寫入文件的行?

0

你的問題是在錯誤的newLastName.CompareTo(lastName)使用。 如果newLastName等於lastName的CompareTo返回0 在這種情況下,你應該設置insertionPointFound = true;

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

爲什麼不進入方法之前delete的文件,因爲你已經再次改寫在你的代碼 -

if(File.Exists("Students.txt")) 
{ 
    File.Delete("Students.txt"); 
} 
相關問題