文件.WriteAllText进程无法访问该文件,因为它正在被另一个进程使用

本文关键字:文件 进程 另一个 WriteAllText 访问 因为 | 更新日期: 2023-09-27 18:15:57

我使用以下代码写入文本文件:

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);

但是,我检查了文本文件,发现它被更新了。

文件.WriteAllText进程无法访问该文件,因为它正在被另一个进程使用

如果Itemsstring的可枚举对象,您应该能够用以下代码替换所有代码:

if (File.Exists(this.location))
    File.WriteAllLines(this.location, this.Items);   

如果它不是,并且您正在利用Items中的每个对象的ToString(),您可以这样做:

if (File.Exists(this.location))
{
    var textLines = Items.Select(x => x.ToString());
    File.WriteAllLines(this.location, textLines);   
}

这应该解决你的问题,文件被锁定,因为它只访问文件一次,而你的原始代码打开它3次。

EDIT:刚刚注意到您添加了一个"Count"行。下面是一个使用流的简洁版本。

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);
        }
    }
}