[英]Write arraylist to text file C#
我有一個讀取文本文件並將內容寫入數組列表的方法。 數組列表是全局聲明的,沒有任何元素。 此方法效果很好。
private void LoadArrayList()
{
try
{
string actor;
TextReader tr;
tr = File.OpenText("actors.txt");
while ((actor = tr.ReadLine()) != null)
{
ActorArrayList.Add(actor);
}
tr.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error loading file!");
}
}
我現在需要創建一個方法,該方法讀取數組列表並將內容寫回到文本文件中,以替換文本文件中當前的內容。 此方法導致空白文本文件。 任何想法就是我想念/做錯了什么嗎?
private void WriteArrayList()
{
TextWriter tw;
try
{
tw = File.CreateText("actors.txt");
foreach (object o in ActorArrayList)
tw.WriteLine(o.ToString());
}
catch (Exception ex)
{
MessageBox.Show("Error saving file!");
}
}
注意:我知道人們似乎不喜歡數組列表或TextReader或TextWriter,但是我正在做的課程涵蓋了它們,因此我必須使用它們。
您需要沖洗或關閉編寫器:
private void WriteArrayList()
{
TextWriter tw = null;
try
{
tw = File.CreateText("actors.txt");
foreach (object o in ActorArrayList)
tw.WriteLine(o.ToString());
}
catch (Exception ex)
{
MessageBox.Show("Error saving file!");
}
finally
{
if(tw != null)
tw.Close();
}
}
您可以使用linq Cast()
在1個班輪中做到這一點:
File.WriteAllLines(@"actors.txt", ActorArrayList.Cast<string>());
另外,下面的邏輯應該解決
using (TextWriter writer = File.CreateText(@"actors.txt"))
{
foreach (string actor in ActorArrayList)
{
writer.WriteLine(actor);
}
}
您缺少對tw.Flush()的調用以及對tw.Close()的調用。 如果不調用這些內容,則內容實際上可能不會寫入磁盤,而只會保留在內存中。 同樣在這種情況下,您應該始終使用前面提到的using塊。
請參閱以下示例:
using (TextWriter tw = File.CreateText("actors.txt"))
{
try
{
foreach (object o in ActorArrayList)
tw.WriteLine(o.ToString());
tw.Flush();
}
catch (Exception ex)
{
MessageBoxShow("Error saving file!");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.