我有一个读取文本文件并将内容写入数组列表的方法。数组列表是全局声明的,没有元素。这种方法非常有效。
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,但我所做的课程涵盖了它们,因此我需要使用它们。
答案 0 :(得分:2)
你需要刷新或关闭你的作家:
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();
}
}
答案 1 :(得分:2)
您可以使用linq Cast()
File.WriteAllLines(@"actors.txt", ActorArrayList.Cast<string>());
或者,以下逻辑应该可以解决
using (TextWriter writer = File.CreateText(@"actors.txt"))
{
foreach (string actor in ActorArrayList)
{
writer.WriteLine(actor);
}
}
答案 2 :(得分:0)
您缺少对tw.Flush()的调用以及对tw.Close()的调用。如果不调用这些内容,内容可能实际上不会写入磁盘,而只会在内存中保留。 同样在这种情况下,您应该使用前面提到的使用块。
见这个例子:
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!");
}
}