删除文件夹时出现文件使用错误
本文关键字:错误 文件 文件夹 删除 | 更新日期: 2023-09-27 18:28:43
我试图删除一个文件夹,但收到以下错误消息:
进程无法访问该文件。其他进程正在使用该文件
string target_dir="D:''projectpath''page";
if (Directory.Exists(target_dir))
Directory.Delete(target_dir, false);
如何解决此错误?
看起来文件被其他进程锁定了。如果在对其进行读取/写入时忘记了处理流读取器/写入器,并且将非托管处理程序泄漏到了文件中,则可能会发生这种情况。
例如,如果您使用以下代码从文件中读取:
StreamReader reader = new StreamReader(fileName);
string contents = reader.ReadToEnd();
如果您从未释放读卡器,文件将被锁定。正确的方法是使用语句包装IDisposable资源,如Streams和StreamReaders:
using (StreamReader reader = new StreamReader(fileName))
{
string contents = reader.ReadToEnd();
}
另一方面,如果文件被应用程序的其他外部进程锁定,那么除了杀死这个进程之外,你几乎无能为力。
我认为,从表面上看,你的问题应该很明显:该文件正被其他人使用,所以你不能删除它所在的目录。如果有办法"强制删除"该文件,它可能会导致其他程序崩溃。我建议捕获错误并将其记录下来或显示给用户,这样他们就可以决定是否真的要删除正在使用的文件。
如果你必须删除文件,你可以看看:
使用C#,如何找出锁定文件的进程?
一旦你知道这个过程是什么,你就可以杀死它,这应该会释放文件。同样,这不是一个好的做法,只能在特殊情况下使用。
要删除diectory,您必须具有正确的权限。
var target_dir = "D:''projectpath'page";
var isWriteAccess = false;
try
{
var collection = Directory.GetAccessControl(target_dir)
.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
if (collection.Cast<FileSystemAccessRule>().Any(rule => rule.AccessControlType == AccessControlType.Allow))
{
isWriteAccess = true;
}
}
catch (UnauthorizedAccessException ex)
{
isWriteAccess = false;
}
catch (Exception ex)
{
isWriteAccess = false;
}
if (!isWriteAccess)
{
MessageBox.Show("no access to directory.");
// Handle here close and kill the blocking process
}
else
{
Directory.Delete(target_dir, false);
}
}