gpt4 book ai didi

c# - Directory.Delete(路径,真)-> IOException : the directory is not empty -> Different owners on Win7

转载 作者:行者123 更新时间:2023-11-30 18:02:23 27 4
gpt4 key购买 nike

卸载时,我在尝试删除目录时收到 IOException。 '目录不为空'。我尝试了下面列出的不同方法,但没有任何效果。留下(且无法删除)的文件拥有不同的所有者。可以删除的文件的所有者为“SYSTEM”。引发异常的文件的所有者为“Administrators(PC_Name\Administrators)”“系统”文件由 installshield 安装程序 (MSI) 编写,而其他文件由我的应用程序编写,由 installshield 启动并提升为管理员...

如何强制删除此文件夹/文件?

    //http://stackoverflow.com/questions/329355/cannot-delete-directory-with-directory-deletepath-true
public static bool DeleteDirectory(string target_dir)
{
bool result = false;

string[] files = Directory.GetFiles(target_dir);
string[] dirs = Directory.GetDirectories(target_dir);

foreach (string file in files)
{
File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);
}

foreach (string dir in dirs)
{
DeleteDirectory(dir);
}

Directory.Delete(target_dir, false);

return result;
}

//http://stackoverflow.com/questions/611921/how-do-i-delete-a-directory-with-read-only-files-in-c
private static void DeleteFileSystemInfo(FileSystemInfo fsi)
{
fsi.Attributes = FileAttributes.Normal;
var di = fsi as DirectoryInfo;
if (di != null)
{
foreach (var dirInfo in di.GetFileSystemInfos())
DeleteFileSystemInfo(dirInfo); }

fsi.Delete();
}

//http://stackoverflow.com/questions/611921/how-do-i-delete-a-directory-with-read-only-files-in-c
public static void ForceDeleteDirectory(string path)
{
DirectoryInfo root;
Stack<DirectoryInfo> fols;
DirectoryInfo fol;
fols = new Stack<DirectoryInfo>();
root = new DirectoryInfo(path);
fols.Push(root);
while (fols.Count > 0)
{
fol = fols.Pop();
fol.Attributes = fol.Attributes & ~(FileAttributes.Archive | FileAttributes.ReadOnly | FileAttributes.Hidden);
foreach (DirectoryInfo d in fol.GetDirectories())
{
fols.Push(d);
}
foreach (FileInfo f in fol.GetFiles())
{
f.Attributes = f.Attributes & ~(FileAttributes.Archive | FileAttributes.ReadOnly | FileAttributes.Hidden);
f.Delete();
}
}
root.Delete(true);
}

编辑:对不起,忘了这个:

在出现问题的文件夹上,在安装时,我给予“用户”帐户完全控制权:

        System.Security.Principal.SecurityIdentifier sid = new System.Security.Principal.SecurityIdentifier(
System.Security.Principal.WellKnownSidType.BuiltinUsersSid, null);
System.Security.Principal.NTAccount acct = sid.Translate(typeof(System.Security.Principal.NTAccount))
as System.Security.Principal.NTAccount;
string usr = acct.ToString();

DirectoryInfo info = new DirectoryInfo(dir);
DirectorySecurity ds = info.GetAccessControl();

ds.AddAccessRule(new FileSystemAccessRule(usr, FileSystemRights.FullControl, AccessControlType.Allow));
ds.AddAccessRule(new FileSystemAccessRule(usr, FileSystemRights.FullControl,
InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly,
AccessControlType.Allow));
info.SetAccessControl(ds);

最佳答案

有两个常见的选项会导致这个问题:
1) 您的应用程序以非管理员用户身份运行。
2) 你的应用程序仍然以某种方式持有它创建的那些文件的锁。

第一个选项不太可能,因为文件是由它创建的,所以让我们以第二个为中心。为了轻松识别此问题,在应用程序运行时(如果进程很快,您可以使用调试器暂停它),尝试手动删除这些文件。如果失败,则意味着应用程序仍然有锁。

如果是这种情况,请确保关闭所有文件流并正确处理它们。

关于c# - Directory.Delete(路径,真)-> IOException : the directory is not empty -> Different owners on Win7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8136467/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com