UnauthorizedAccessException StreamWriter

时间:2013-09-09 15:16:16

标签: c# file streamwriter unauthorizedaccessexcepti

我有以下代码:

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。知道为什么吗?我有管理员权限,程序以管理员身份运行。

1 个答案:

答案 0 :(得分:3)

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

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

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