1

我有以下代码:

public WriteToFile(string path, List<string> text)
{
    File.Delete(path);
    using (TextWriter writer = new StreamWriter(path, true))
    {
        foreach(string t in text)
        {
            writer.WriteLine(text);
        }
    }
}

大多数情况下它工作正常,文件被删除,然后用里面的文本再次创建。然而,该using语句每隔一段时间就会抛出一个UnauthorizedAccessException. 知道为什么吗?我有管理员权限,程序以管理员身份运行。

4

1 回答 1

3

这是正常的,因为您使用了 File.Delete(),它变得无法诊断。这是不必要的,只需使用 StreamWriter(string) 构造函数。

这是错误的,因为删除文件并不能保证该文件将被实际删除。它可能被另一个进程打开。通过删除共享打开文件,病毒扫描程序和文件索引器等程序通常会这样做。这使得 Delete() 调用成功,但文件不会消失,直到文件上的所有句柄都关闭。您收到 UnauthorizedAccessException 异常,因为该文件尚未被删除。

通过删除 File.Delete() 调用取得成功。您仍然需要假设 StreamReader() 构造函数可能会失败。不太常见的是,它迟早会发生。您将收到更好的异常消息。这就是多任务操作系统的变幻莫测。

于 2013-09-09T17:15:01.400 回答