我正在使用此代码写入文本文件:
int num;
StreamWriter writer2;
bool flag = true;
string str = "";
if (flag == File.Exists(this.location))
{
File.WriteAllText(this.location, string.Empty);
new FileInfo(this.location).Open(FileMode.Truncate).Close();
using (writer2 = this.SW = File.AppendText(this.location))
{
this.SW.WriteLine("Count=" + this.Count);
for (num = 0; num < this.Count; num++)
{
this.SW.WriteLine(this.Items[num]);
}
this.SW.Close();
}
}
但是我一直在告诉System.IOException
说该进程无法访问该文件,因为该代码正在被另一个进程使用:
File.WriteAllText(this.location, string.Empty);
但是,我检查了文本文件,发现它已更新。
答案 0 :(得分:1)
如果Items
是string
的可枚举,您应该可以使用以下代码替换所有代码。
if (File.Exists(this.location))
File.WriteAllLines(this.location, this.Items);
如果不是,并且您正在ToString()
中的每个对象中使用Items
,则可以执行此操作:
if (File.Exists(this.location))
{
var textLines = Items.Select(x => x.ToString());
File.WriteAllLines(this.location, textLines);
}
这应该可以解决您锁定文件的问题,因为它只会在您的原始代码打开它一次的情况下访问该文件一次。
编辑:刚刚注意到您添加了“计数”行。这是一个使用流的更干净的版本。
if (File.Exists(this.location))
{
using (var fileInfo = new FileInfo(this.location)
{
using(var writer = fileInfo.CreateText())
{
writer.WriteLine("Count=" + Items.Count);
foreach(var item in Items)
writer.WriteLine(item);
}
}
}