答:
你可以尝试以下几种方法:
1、在删除文件之前,先检查文件的属性是否包含只读,如果是的话,用File.SetAttributes方法将其改为正常属性。
2、在删除文件夹之前,先遍历删除文件夹内的所有文件和子文件夹,然后再用Directory.Delete方法删除文件夹。
3、在删除文件之前,用File.GetAccessControl方法获取文件的访问控制,然后用FileSecurity.SetOwner和FileSecurity.SetAccessRule方法为当前用户赋予完全控制的权限,最后用File.SetAccessControl方法更新文件的访问控制。
下面写了一些代码,你可以参考一下:
方法一:删除只读文件
//假设FFName是你要删除的文件的路径
if (File.GetAttributes (FFName).ToString ().IndexOf ("ReadOnly") != -1)
File.SetAttributes (FFName, FileAttributes.Normal); //将文件属性改为正常
File.Delete (FFName); //删除文件
方法二:删除只读文件夹
//假设info是你要删除的文件夹的DirectoryInfo对象
public void DeleteFileByDirectory (DirectoryInfo info)
{
foreach (FileInfo file in info.GetFiles ()) //遍历文件夹内的所有文件
{
if (file.Attributes.ToString ().IndexOf ("ReadOnly") != -1)
file.Attributes = FileAttributes.Normal; //将文件属性改为正常
file.Delete (); //删除文件
}
foreach (DirectoryInfo dir in info.GetDirectories ()) //遍历文件夹内的所有子文件夹
{
DeleteFileByDirectory (dir); //递归调用
}
info.Delete (); //删除文件夹
}
方法三:修改文件的访问控制
//假设filePath是你要删除的文件的路径
//获取文件信息
FileInfo fileInfo = new FileInfo (filePath);
//获得该文件的访问权限
System.Security.AccessControl.FileSecurity fileSecurity = fileInfo.GetAccessControl ();
//添加ereryone用户组的访问权限规则 完全控制权限
fileSecurity.AddAccessRule (new FileSystemAccessRule ("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
//添加Users用户组的访问权限规则 完全控制权限
fileSecurity.AddAccessRule (new FileSystemAccessRule ("Users", FileSystemRights.FullControl, AccessControlType.Allow));
//设置访问权限
fileInfo.SetAccessControl (fileSecurity);
//删除文件
File.Delete (filePath);