pGina.Plugin.LocalMachine.LocalAccount.RecurseDelete C# (CSharp) Метод

RecurseDelete() приватный статический Метод

private static RecurseDelete ( string directory ) : void
directory string
Результат void
        private static void RecurseDelete(string directory)
        {
            // m_logger.DebugFormat("Dir: {0}", directory);
            if (!Directory.Exists(directory))
            {
                return;
            }

            DirectorySecurity dirSecurity = Directory.GetAccessControl(directory);
            dirSecurity.AddAccessRule(new FileSystemAccessRule(WindowsIdentity.GetCurrent().Name, FileSystemRights.FullControl, AccessControlType.Allow));
            Directory.SetAccessControl(directory, dirSecurity);
            File.SetAttributes(directory, FileAttributes.Normal);

            DirectoryInfo di = new DirectoryInfo(directory);
            if ((di.Attributes & FileAttributes.ReparsePoint) != 0)
            {
                // m_logger.DebugFormat("{0} is a reparse point, just deleting without recursing", directory);
                Directory.Delete(directory, false);
                return;
            }

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

            // Files
            foreach (string file in files)
            {
                try
                {
                    // m_logger.DebugFormat("File: {0}", file);
                    FileSecurity fileSecurity = File.GetAccessControl(file);
                    fileSecurity.AddAccessRule(new FileSystemAccessRule(WindowsIdentity.GetCurrent().Name, FileSystemRights.FullControl, AccessControlType.Allow));
                    File.SetAccessControl(file, fileSecurity); // Set the new access settings.
                    File.SetAttributes(file, FileAttributes.Normal);
                    File.Delete(file);
                }
                catch (Exception ex)
                {
                    m_logger.Debug(ex.Message);
                }
            }

            // Recurse each dir
            foreach (string dir in dirs)
            {
                try
                {
                    RecurseDelete(dir);
                }
                catch (Exception ex)
                {
                    m_logger.Debug(ex.Message);
                }
            }
            try
            {
                Directory.Delete(directory, false);
            }
            catch (Exception ex)
            {
                m_logger.Debug(ex.Message);
            }
        }