2012-11-30 89 views
0

我正在寫一個列表到一個文件,該列表從我輸入的文本中獲取表單應用程序的數據。這可以工作,但它會在每次啓動表單時覆蓋文件,而不是保存它並添加新的數據。如何將「AppendAllLines」或「WriteAllLines」添加到此解決方案中?覆蓋寫入器問題

 public List<String> listDeliveries() 
    { 
     List<String> listDeliveries = new List<string>();   
     using (StreamWriter writer = new StreamWriter("Database.txt")) 
     { 
      foreach (Delivery del in deliveries) 
      { 
       String delAsString = del.summary();     

       listDeliveries.Add(delAsString); 

       writer.WriteLine(delAsString);     
      } 

     } 
     return listDeliveries; 

    } 

回答

1

您可以使用ToList創建列表和File.AppendAllLines從列表中追加行:

List<string> listDeliveries = deliveries.Select(d => d.summary()) 
             .ToList(); 
File.AppendAllLines("Database.txt", listDeliveries); 
0

您可以使用

using (StreamWriter writer = new StreamWriter("Database.txt", true)) 

要追加而不是覆蓋

1

如何添加 「AppendAllLines」 或 「WriteAllLines」 這是一個解決辦法?

那麼它看起來像你只是想:

List<String> listDeliveries = deliveries.Select(x => x.summary()).ToList(); 
File.AppendAllLines("Database.txt", listDeliveries); 
return listDeliveries; 

(是的,你可以創建StreamWritertrue作爲第二個參數,但AppendAllLines更簡單...)

0

使用重載的構造函數,可以指定是否追加。默認爲false

StreamWriter writer = new StreamWriter("Database.txt", true) 
2
var listDeliveries = deliveries.Select(d=>d.summary()).ToList(); 
File.AppendAllLines("Database.txt", listDeliveries); 
return listDeliveries; 
+0

*然後你會*最終通過它再次以創造去'listDeliveries' 。爲什麼? –

+0

好吧,如果需要列表,它顯然應該被存儲,但這不是一個問題 –

+0

那麼這個問題是根據一個方法已經建立的列表返回,所以我認爲這是合理的假設這仍然需要成爲解決方案的一部分。如果你改變的唯一*的東西是它如何寫入磁盤,按照你的解決方案,那麼這就忽略了通用性。 –

0

當您創建的StreamWriter,傳遞一個布爾值,來告訴它的數據附加到文件,而不是覆蓋。

using (StreamWriter writer = new StreamWriter("Database.txt", true))