Popular Posts
Enable edit option in Shutter in Linux sudo apt-get install libgoo-canvas-perl Reference: How To Fix Disabled Edit Option In Shutter in Linux Mint CORS in Asp.net MVC Web API v2 Step 1. Install cors from NeGet Step 2. Enable cors in config using System; using System.Collections.Generic; using System.Linq; using ... DNS SERVER LIST Google 8.8.8.8 8.8.4.4 TWNIC 192.83.166.11 211.72.210.250 HiNet 168.95.1.1 168.95.192.1 Seednet 北區 DNS (台北, 桃園, 新竹, 宜蘭, 花蓮, 苗栗) 139....
Blog Archive
Stats
Copy/Delete/Permission directory
using System;
using System.IO;
using System.Security.AccessControl;

namespace Bruce.Lib
{
    public class DirHelper
    {
        /// <summary>
        /// 複製目錄
        /// </summary>
        /// <param name="sourcePath">來源目錄</param>
        /// <param name="destPath">目地目錄</param>
        /// <param name="overWrite">覆蓋原檔</param>
        /// <param name="copyPermission">覆複目錄權限</param>
        public static void CopyDirectory(string sourcePath, string destPath, bool overWrite, bool copyPermission)
        {
            DirectoryInfo sourceInfo = new DirectoryInfo(sourcePath);
            DirectoryInfo targetInfo = new DirectoryInfo(destPath);

            if (sourceInfo.Exists)
            {
                if (!targetInfo.Exists)
                {
                    if (copyPermission)
                        targetInfo.Create(sourceInfo.GetAccessControl());
                    else
                        targetInfo.Create();
                }

                DirectoryInfo[] directories = sourceInfo.GetDirectories();
                foreach (DirectoryInfo directory in directories)
                {
                    CopyDirectory(directory.FullName, directory.FullName.Replace(sourceInfo.FullName, targetInfo.FullName), overWrite, copyPermission);
                }

                FileInfo[] files = sourceInfo.GetFiles();
                foreach (FileInfo file in files)
                {
                    file.CopyTo(file.FullName.Replace(sourceInfo.FullName, targetInfo.FullName), overWrite);
                }
            }
            else { throw new ArgumentException("Directory is not exist."); }
        }
        /// <summary>
        /// 刪除目錄
        /// </summary>
        /// <param name="path">目錄錄徑</param>
        public static void DeleteDirectory(string path)
        {
            DirectoryInfo info = new DirectoryInfo(path);
            if (info.Exists)
            {
                DirectoryInfo[] directories = info.GetDirectories();
                foreach (DirectoryInfo directory in directories)
                {
                    DeleteDirectory(directory.FullName);
                    directory.Delete(true);
                }

                FileInfo[] files = info.GetFiles();
                foreach (FileInfo file in files)
                {
                    if (file.Exists)
                    {
                        file.Attributes = FileAttributes.Normal;
                        file.Delete();
                    }
                }

                info.Delete(true);
            }
        }
        /// <summary>
        /// 複製目錄權限
        /// </summary>
        /// <param name="source">來源目錄</param>
        /// <param name="target">目的目錄</param>
        public static void CopyDirectoryPermission(string source, string target)
        {
            DirectoryInfo sourceInfo = new DirectoryInfo(source);
            DirectoryInfo targetInfo = new DirectoryInfo(target);

            if (!sourceInfo.Exists || !targetInfo.Exists) throw new ArgumentException("Directory is not exist.");

            if (sourceInfo.FullName != sourceInfo.Root.FullName && targetInfo.FullName != targetInfo.Root.FullName)
            {
                DirectorySecurity sourceSecurity = sourceInfo.GetAccessControl();
                AuthorizationRuleCollection acl = sourceSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));

                DirectorySecurity targetSecurity = targetInfo.GetAccessControl();
                foreach (FileSystemAccessRule rule in acl)
                {
                    targetSecurity.AddAccessRule(rule);
                }
                targetInfo.SetAccessControl(targetSecurity);
            }
        }
    }
}