Popular Posts
javax.net.ssl.SSLHandshakeException: Connection closed by peer in Android 5.0 Lollipop Recently, there is a error occurs when access website via ssl connection like below although it worked fine several days ago. // Enable SSL... Close window without confirm (I.E only) window.opener=null; window.open('','_self'); window.close(); focus on validating function focusOnInvalidControl() {     for (var i = 0; i < Page_Validators.length; i++) {         if (!Page_Validators[i].isvalid) {     ...
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);
            }
        }
    }
}