我有以下代码:
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
。知道为什么吗?我有管理员权限,程序以管理员身份运行。
答案 0 :(得分:3)
这是正常的,因为你使用了File.Delete(),所以它变得无法识别。这是不必要的,只需使用StreamWriter(string)构造函数。
这是错误的,因为删除文件并不能保证文件实际上会被删除。它可以通过另一个进程打开。哪个用删除共享打开了文件,病毒扫描程序和文件索引器等程序通常会这样做。这使得Delete()调用成功,但文件不会消失,直到文件上的所有句柄都关闭。您收到了UnauthorizedAccessException异常,因为该文件尚未被删除。
通过删除File.Delete()调用来获得提升。您仍然需要假设StreamReader()构造函数可能失败。不太经常,它迟早会发生。您将获得更好的异常消息。这就是多任务操作系统的变幻莫测。